Committed by
Gerrit Code Review
ONOS-1220 - JSON output for partitions command
Change-Id: I2d1418ed36dc06a2a17f05cc07e5ef221da84baa
Showing
1 changed file
with
57 additions
and
8 deletions
... | @@ -15,12 +15,17 @@ | ... | @@ -15,12 +15,17 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.cli.net; | 16 | package org.onosproject.cli.net; |
17 | 17 | ||
18 | +import java.util.List; | ||
19 | + | ||
18 | import org.apache.karaf.shell.commands.Command; | 20 | import org.apache.karaf.shell.commands.Command; |
19 | import org.onosproject.cli.AbstractShellCommand; | 21 | import org.onosproject.cli.AbstractShellCommand; |
20 | import org.onosproject.store.service.PartitionInfo; | 22 | import org.onosproject.store.service.PartitionInfo; |
21 | import org.onosproject.store.service.StorageAdminService; | 23 | import org.onosproject.store.service.StorageAdminService; |
22 | 24 | ||
23 | -import java.util.List; | 25 | +import com.fasterxml.jackson.databind.JsonNode; |
26 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
27 | +import com.fasterxml.jackson.databind.node.ArrayNode; | ||
28 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
24 | 29 | ||
25 | /** | 30 | /** |
26 | * Command to list the database partitions in the system. | 31 | * Command to list the database partitions in the system. |
... | @@ -31,11 +36,12 @@ public class PartitionsListCommand extends AbstractShellCommand { | ... | @@ -31,11 +36,12 @@ public class PartitionsListCommand extends AbstractShellCommand { |
31 | 36 | ||
32 | private static final String FMT = "%-20s %8s %25s %s"; | 37 | private static final String FMT = "%-20s %8s %25s %s"; |
33 | 38 | ||
34 | - @Override | 39 | + /** |
35 | - protected void execute() { | 40 | + * Displays partition info as text. |
36 | - StorageAdminService storageAdminService = get(StorageAdminService.class); | 41 | + * |
37 | - List<PartitionInfo> partitionInfo = storageAdminService.getPartitionInfo(); | 42 | + * @param partitionInfo partition descriptions |
38 | - | 43 | + */ |
44 | + private void displayPartitions(List<PartitionInfo> partitionInfo) { | ||
39 | print(FMT, "Name", "Term", "Members", ""); | 45 | print(FMT, "Name", "Term", "Members", ""); |
40 | 46 | ||
41 | for (PartitionInfo info : partitionInfo) { | 47 | for (PartitionInfo info : partitionInfo) { |
... | @@ -43,13 +49,56 @@ public class PartitionsListCommand extends AbstractShellCommand { | ... | @@ -43,13 +49,56 @@ public class PartitionsListCommand extends AbstractShellCommand { |
43 | for (String member : info.members()) { | 49 | for (String member : info.members()) { |
44 | if (first) { | 50 | if (first) { |
45 | print(FMT, info.name(), info.term(), member, | 51 | print(FMT, info.name(), info.term(), member, |
46 | - member.equals(info.leader()) ? "*" : ""); | 52 | + member.equals(info.leader()) ? "*" : ""); |
47 | first = false; | 53 | first = false; |
48 | } else { | 54 | } else { |
49 | print(FMT, "", "", member, | 55 | print(FMT, "", "", member, |
50 | - member.equals(info.leader()) ? "*" : ""); | 56 | + member.equals(info.leader()) ? "*" : ""); |
51 | } | 57 | } |
52 | } | 58 | } |
53 | } | 59 | } |
54 | } | 60 | } |
61 | + | ||
62 | + /** | ||
63 | + * Converts partition info into a JSON object. | ||
64 | + * | ||
65 | + * @param partitionInfo partition descriptions | ||
66 | + */ | ||
67 | + private JsonNode json(List<PartitionInfo> partitionInfo) { | ||
68 | + ObjectMapper mapper = new ObjectMapper(); | ||
69 | + ArrayNode partitions = mapper.createArrayNode(); | ||
70 | + | ||
71 | + // Create a JSON node for each partition | ||
72 | + partitionInfo.stream() | ||
73 | + .forEach(info -> { | ||
74 | + ObjectNode partition = mapper.createObjectNode(); | ||
75 | + | ||
76 | + // Add each member to the "members" array for this partition | ||
77 | + ArrayNode members = partition.putArray("members"); | ||
78 | + info.members() | ||
79 | + .stream() | ||
80 | + .forEach(members::add); | ||
81 | + | ||
82 | + // Complete the partition attributes and add it to the array | ||
83 | + partition.put("name", info.name()) | ||
84 | + .put("term", info.term()) | ||
85 | + .put("leader", info.leader()); | ||
86 | + partitions.add(partition); | ||
87 | + | ||
88 | + }); | ||
89 | + | ||
90 | + return partitions; | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + protected void execute() { | ||
95 | + StorageAdminService storageAdminService = get(StorageAdminService.class); | ||
96 | + List<PartitionInfo> partitionInfo = storageAdminService.getPartitionInfo(); | ||
97 | + | ||
98 | + if (outputJson()) { | ||
99 | + print("%s", json(partitionInfo)); | ||
100 | + } else { | ||
101 | + displayPartitions(partitionInfo); | ||
102 | + } | ||
103 | + } | ||
55 | } | 104 | } | ... | ... |
-
Please register or login to post a comment