diff --git a/src/main/java/org/phoebus/channelfinder/processors/aa/AAChannelProcessor.java b/src/main/java/org/phoebus/channelfinder/processors/aa/AAChannelProcessor.java index a691f49..d7ad8e8 100644 --- a/src/main/java/org/phoebus/channelfinder/processors/aa/AAChannelProcessor.java +++ b/src/main/java/org/phoebus/channelfinder/processors/aa/AAChannelProcessor.java @@ -199,7 +199,7 @@ private void addChannelChange( aaArchivePVS.get(archiverAlias).add(newArchiverPV); } } - + private ArchiveAction pickArchiveAction(String archiveStatus, String pvStatus) { if (archiveStatus.equals("Being archived") && (pvStatus.equals(PV_STATUS_INACTIVE))) { return ArchiveAction.PAUSE; @@ -209,13 +209,14 @@ private ArchiveAction pickArchiveAction(String archiveStatus, String pvStatus) { && !archiveStatus.equals("Paused") && pvStatus.equals(PV_STATUS_ACTIVE)) { // If archive status anything else return ArchiveAction.ARCHIVE; + } return ArchiveAction.NONE; } private Map> getArchiveActions( - Map archivePVS, ArchiverInfo archiverInfo) { + Map archivePVS, ArchiverInfo archiverInfo) { if (archiverInfo == null) { return Map.of(); } @@ -223,25 +224,37 @@ private Map> getArchiveActions( logger.log(Level.INFO, () -> String.format("Get archiver status in archiver %s", archiverInfo)); Map> result = new EnumMap<>(ArchiveAction.class); - Arrays.stream(ArchiveAction.values()) - .forEach(archiveAction -> result.put(archiveAction, new ArrayList<>())); + Arrays.stream(ArchiveAction.values()).forEach(archiveAction -> result.put(archiveAction, new ArrayList<>())); // Don't request to archive an empty list. if (archivePVS.isEmpty()) { return result; } - List> statuses = - archiverClient.getStatuses(archivePVS, archiverInfo.url(), archiverInfo.alias()); - statuses.forEach( - archivePVStatusJsonMap -> { - String archiveStatus = archivePVStatusJsonMap.get("status"); - String pvName = archivePVStatusJsonMap.get("pvName"); - String pvStatus = archivePVS.get(pvName).getPvStatus(); - ArchiveAction action = pickArchiveAction(archiveStatus, pvStatus); - result.get(action).add(archivePVS.get(pvName)); - }); + List> statuses = archiverClient.getStatuses(archivePVS, archiverInfo.url(), archiverInfo.alias()); + logger.log(Level.FINER, "Statuses {0}", statuses); + statuses.forEach(archivePVStatusJsonMap -> { + String archiveStatus = archivePVStatusJsonMap.get("status"); + String pvName = archivePVStatusJsonMap.get("pvName"); + + if (archiveStatus == null || pvName == null) { + logger.log(Level.WARNING, "Missing status or pvName in archivePVStatusJsonMap: {0}", archivePVStatusJsonMap); + return; + } + + ArchivePVOptions archivePVOptions = archivePVS.get(pvName); + if (archivePVOptions == null) { + logger.log(Level.WARNING, "archivePVS does not contain pvName: {0}", pvName); + return; + } + + String pvStatus = archivePVOptions.getPvStatus(); + ArchiveAction action = pickArchiveAction(archiveStatus, pvStatus); + + List archivePVOptionsList = result.get(action); + archivePVOptionsList.add(archivePVOptions); + }); return result; } - + private ArchivePVOptions createArchivePV( List policyList, Channel channel, String archiveProperty, String pvStaus) { ArchivePVOptions newArchiverPV = new ArchivePVOptions();