Skip to content

Commit fbe7ad3

Browse files
committed
Additional API parameters for save&restore compare feature
1 parent 8dd58a2 commit fbe7ad3

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

app/save-and-restore/util/src/main/java/org/phoebus/saveandrestore/util/SnapshotUtil.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,10 @@ public void release() {
286286
* if the comparison evaluates to equal, then the actual live and stored value are not added to the {@link CompareResult}
287287
* objects in order to avoid handling/transferring potentially large amounts of data.
288288
*/
289-
public List<CompareResult> comparePvs(final List<SnapshotItem> savedSnapshotItems, double tolerance) {
289+
public List<CompareResult> comparePvs(final List<SnapshotItem> savedSnapshotItems,
290+
double tolerance,
291+
PvCompareMode comparisonMode,
292+
boolean skipReadback) {
290293
if (tolerance < 0) {
291294
throw new RuntimeException("Tolerance value must be >=0");
292295
}

app/save-and-restore/util/src/test/java/org/phoebus/saveandrestore/util/SnapshotUtilTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.phoebus.applications.saveandrestore.model.CompareResult;
1616
import org.phoebus.applications.saveandrestore.model.ConfigPv;
1717
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
18+
import org.phoebus.applications.saveandrestore.model.PvCompareMode;
1819
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
1920
import org.phoebus.core.vtypes.VTypeHelper;
2021
import org.phoebus.pv.PV;
@@ -98,15 +99,15 @@ public void testComparePvs(){
9899
snapshotItem2.setConfigPv(configPv2);
99100
snapshotItem2.setValue(VDouble.of(771.0, Alarm.none(), Time.now(), Display.none()));
100101

101-
List<CompareResult> compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 0.0);
102+
List<CompareResult> compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 0.0, PvCompareMode.ABSOLUTE, false);
102103

103104
assertTrue(compareResults.get(0).isEqual());
104105
assertTrue(compareResults.get(1).isEqual());
105106

106107
snapshotItem1.setValue(VDouble.of(43.0, Alarm.none(), Time.now(), Display.none()));
107108
snapshotItem2.setValue(VDouble.of(771.0, Alarm.none(), Time.now(), Display.none()));
108109

109-
compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 0.0);
110+
compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 0.0, PvCompareMode.ABSOLUTE, false);
110111

111112
assertFalse(compareResults.get(0).isEqual());
112113
assertNotNull(compareResults.get(0).getStoredValue());
@@ -118,12 +119,12 @@ public void testComparePvs(){
118119
snapshotItem1.setValue(VDouble.of(43.0, Alarm.none(), Time.now(), Display.none()));
119120
snapshotItem2.setValue(VDouble.of(771.0, Alarm.none(), Time.now(), Display.none()));
120121

121-
compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 10.0);
122+
compareResults = snapshotUtil.comparePvs(List.of(snapshotItem1, snapshotItem2), 10.0, PvCompareMode.ABSOLUTE, false);
122123

123124
assertTrue(compareResults.get(0).isEqual());
124125
assertTrue(compareResults.get(1).isEqual());
125126

126-
assertThrows(RuntimeException.class, () -> snapshotUtil.comparePvs(null, -77));
127+
assertThrows(RuntimeException.class, () -> snapshotUtil.comparePvs(null, -77, PvCompareMode.ABSOLUTE, false));
127128

128129
}
129130
}

services/save-and-restore/src/main/java/org/phoebus/service/saveandrestore/web/controllers/ComparisonController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.phoebus.applications.saveandrestore.model.CompareResult;
2121
import org.phoebus.applications.saveandrestore.model.CompositeSnapshotData;
2222
import org.phoebus.applications.saveandrestore.model.Node;
23+
import org.phoebus.applications.saveandrestore.model.PvCompareMode;
2324
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
2425
import org.phoebus.saveandrestore.util.SnapshotUtil;
2526
import org.phoebus.service.saveandrestore.NodeNotFoundException;
@@ -59,7 +60,10 @@ public class ComparisonController extends BaseController {
5960
* comparison evaluates to &quot;equal&quot; for a PV.
6061
*/
6162
@GetMapping(value = "/{nodeId}", produces = JSON)
62-
public List<CompareResult> compare(@PathVariable String nodeId, @RequestParam(value = "tolerance", required = false, defaultValue = "0") double tolerance) {
63+
public List<CompareResult> compare(@PathVariable String nodeId,
64+
@RequestParam(value = "tolerance", required = false, defaultValue = "0") double tolerance,
65+
@RequestParam(value = "comparisonMode", required = false, defaultValue = "ABSOLUTE") PvCompareMode pvCompareMode,
66+
@RequestParam(value = "skipReadback", required = false, defaultValue = "false") boolean skipReadback) {
6367
if(tolerance < 0){
6468
throw new IllegalArgumentException("Tolerance must be >=0");
6569
}
@@ -69,9 +73,9 @@ public List<CompareResult> compare(@PathVariable String nodeId, @RequestParam(va
6973
}
7074
switch (node.getNodeType()) {
7175
case SNAPSHOT:
72-
return snapshotUtil.comparePvs(getSnapshotItems(node.getUniqueId()), tolerance);
76+
return snapshotUtil.comparePvs(getSnapshotItems(node.getUniqueId()), tolerance, pvCompareMode, skipReadback);
7377
case COMPOSITE_SNAPSHOT:
74-
return snapshotUtil.comparePvs(getCompositeSnapshotItems(node.getUniqueId()), tolerance);
78+
return snapshotUtil.comparePvs(getCompositeSnapshotItems(node.getUniqueId()), tolerance, pvCompareMode, skipReadback);
7579
default:
7680
throw new IllegalArgumentException("Node type" + node.getNodeType() + " cannot be compared");
7781
}

0 commit comments

Comments
 (0)