From 3619cc9836e09efeb8d09e28c6b5a8acb8b0a5c4 Mon Sep 17 00:00:00 2001 From: JvD_Ericsson Date: Mon, 12 May 2025 14:22:54 +0100 Subject: [PATCH] TEIV-Adapter: Optimize sync logic now only gets READY devices from NCMP instead of all Issue-ID: SMO-187 Change-Id: I99b7017a777419ea4b28895a73947e3aa3bdf8ca Signed-off-by: JvD_Ericsson --- .../ncmp_to_teiv_adapter/NcmpPollingClient.java | 2 +- .../ncmp_to_teiv_adapter/NcmpToTeivIngestion.java | 27 +++++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java index f065998..89fdad6 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java @@ -56,7 +56,7 @@ public class NcmpPollingClient { public List getAllCmHandlesFromNcmp() { try { HttpUrl url = HttpUrl.parse(baseUrl + searchesUrl).newBuilder().build(); - String requestBody = "{\"conditions\": [{\"name\": \"hasAllModules\"}]}"; + String requestBody = "{\"cmHandleQueryParameters\":[{\"conditionName\":\"cmHandleWithCpsPath\",\"conditionParameters\":[{\"cpsPath\":\"//state[@cm-handle-state='READY']\"}]}]}"; RequestBody body = RequestBody.create(requestBody, MediaType.parse("application/json")); Request request = new Request.Builder().url(url).post(body).addHeader("Content-Type", "application/json") diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java index 43f0b3e..a4f8827 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java @@ -77,20 +77,24 @@ public class NcmpToTeivIngestion { ManagedElementWrapper wrapper = ncmpPollingClient.getAllManagedElementsFromNcmp(cmHandle); Map json = wrapper.toTeivCloudEventPayload(); try { - sendCloudEvent(json, "merge"); - if (addedCmHandles.containsKey(cmHandle)) { Map previousJson = (Map) addedCmHandles.get(cmHandle); - Map toDeleteJson = new HashMap<>(); - toDeleteJson.put("entities", List.of(findMissingItems(extractEntities(previousJson), extractEntities(json), - "entities"))); - toDeleteJson.put("relationships", List.of(findMissingItems(extractRelationships(previousJson), - extractRelationships(json), "relationships"))); - - sendCloudEvent(toDeleteJson, "delete"); + Map missingEntities = findMissingItems(extractEntities(previousJson), extractEntities(json), + "entities"); + if (!missingEntities.isEmpty()) { + toDeleteJson.put("entities", List.of(missingEntities)); + } + Map missingRelationships = findMissingItems(extractRelationships(previousJson), + extractRelationships(json), "relationships"); + if (!missingRelationships.isEmpty()) { + toDeleteJson.put("relationships", List.of(missingRelationships)); + } + if (!toDeleteJson.isEmpty()) { + sendCloudEvent(toDeleteJson, "delete"); + } } - + sendCloudEvent(json, "merge"); addedCmHandles.put(cmHandle, json); } catch (JsonProcessingException e) { log.error("Error processing data from cmHandle {}. Event not sent. Error message: {}", cmHandle, e @@ -113,7 +117,8 @@ public class NcmpToTeivIngestion { List> currentList = currentItems.getOrDefault(key, List.of()); List> previousList = previousItems.get(key); - List> missing = previousList.stream().filter(item -> !currentList.contains(item)).toList(); + List> missing = previousList.stream().filter(item -> currentList.stream().noneMatch( + currentItem -> currentItem.get("id").equals(item.get("id")))).toList(); if (!missing.isEmpty()) { missingItems.put(key, missing); log.info("Missing {} for key {}: {}", itemType, key, missing); -- 2.16.6