Committed by
Gerrit Code Review
Leaders cli improvements:
-c option now returns term and term start time. -j option returns all info (including candidates) -fixes the NPE identified in ONOS-3846 Change-Id: Ifbbd1aab92df78113f5abab09d360cee7f43c2d0
Showing
1 changed file
with
36 additions
and
61 deletions
| ... | @@ -41,7 +41,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; | ... | @@ -41,7 +41,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; |
| 41 | public class LeaderCommand extends AbstractShellCommand { | 41 | public class LeaderCommand extends AbstractShellCommand { |
| 42 | 42 | ||
| 43 | private static final String FMT = "%-30s | %-15s | %-5s | %-10s |"; | 43 | private static final String FMT = "%-30s | %-15s | %-5s | %-10s |"; |
| 44 | - private static final String FMT_C = "%-30s | %-15s | %-19s |"; | 44 | + private static final String FMT_C = "%-30s | %-15s | %-5s | %-10s | %-19s |"; |
| 45 | private boolean allTopics; | 45 | private boolean allTopics; |
| 46 | private Pattern pattern; | 46 | private Pattern pattern; |
| 47 | 47 | ||
| ... | @@ -83,74 +83,54 @@ public class LeaderCommand extends AbstractShellCommand { | ... | @@ -83,74 +83,54 @@ public class LeaderCommand extends AbstractShellCommand { |
| 83 | print("------------------------------------------------------------------------"); | 83 | print("------------------------------------------------------------------------"); |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | - private void displayCandidates(Map<String, Leadership> leaderBoard, | 86 | + private void displayCandidates(Map<String, Leadership> leaderBoard) { |
| 87 | - Map<String, List<NodeId>> candidates) { | 87 | + print("--------------------------------------------------------------------------------------------"); |
| 88 | - print("------------------------------------------------------------------------"); | 88 | + print(FMT_C, "Topic", "Leader", "Term", "Elected", "Candidates"); |
| 89 | - print(FMT_C, "Topic", "Leader", "Candidates"); | 89 | + print("--------------------------------------------------------------------------------------------"); |
| 90 | - print("------------------------------------------------------------------------"); | 90 | + leaderBoard.entrySet() |
| 91 | - candidates | ||
| 92 | - .entrySet() | ||
| 93 | .stream() | 91 | .stream() |
| 94 | .filter(es -> allTopics || pattern.matcher(es.getKey()).matches()) | 92 | .filter(es -> allTopics || pattern.matcher(es.getKey()).matches()) |
| 93 | + .sorted((a, b) -> leadershipComparator.compare(a.getValue(), b.getValue())) | ||
| 95 | .forEach(es -> { | 94 | .forEach(es -> { |
| 96 | - List<NodeId> list = es.getValue(); | 95 | + Leadership l = es.getValue(); |
| 97 | - if (list == null || list.isEmpty()) { | 96 | + List<NodeId> candidateList = l.candidates(); |
| 97 | + if (candidateList == null || candidateList.isEmpty()) { | ||
| 98 | return; | 98 | return; |
| 99 | } | 99 | } |
| 100 | - Leadership l = leaderBoard.get(es.getKey()); | ||
| 101 | print(FMT_C, | 100 | print(FMT_C, |
| 102 | es.getKey(), | 101 | es.getKey(), |
| 103 | String.valueOf(l.leaderNodeId()), | 102 | String.valueOf(l.leaderNodeId()), |
| 103 | + l.leader().term(), | ||
| 104 | + Tools.timeAgo(l.leader().termStartTime()), | ||
| 104 | // formatting hacks to get it into a table | 105 | // formatting hacks to get it into a table |
| 105 | - list.get(0).toString()); | 106 | + candidateList.get(0).toString()); |
| 106 | - list.subList(1, list.size()).forEach(n -> print(FMT_C, " ", " ", n)); | 107 | + candidateList.subList(1, candidateList.size()) |
| 107 | - print(FMT_C, " ", " ", " "); | 108 | + .forEach(n -> print(FMT_C, " ", " ", " ", " ", n)); |
| 109 | + print(FMT_C, " ", " ", " ", " ", " "); | ||
| 108 | }); | 110 | }); |
| 109 | - print("------------------------------------------------------------------------"); | 111 | + print("--------------------------------------------------------------------------------------------"); |
| 110 | } | 112 | } |
| 111 | 113 | ||
| 112 | /** | 114 | /** |
| 113 | - * Returns JSON node representing the leaders. | 115 | + * Returns JSON node representing the leaders and candidates. |
| 114 | * | 116 | * |
| 115 | * @param leaderBoard map of leaders | 117 | * @param leaderBoard map of leaders |
| 116 | */ | 118 | */ |
| 117 | private JsonNode json(Map<String, Leadership> leaderBoard) { | 119 | private JsonNode json(Map<String, Leadership> leaderBoard) { |
| 118 | ObjectMapper mapper = new ObjectMapper(); | 120 | ObjectMapper mapper = new ObjectMapper(); |
| 119 | ArrayNode result = mapper.createArrayNode(); | 121 | ArrayNode result = mapper.createArrayNode(); |
| 120 | - leaderBoard.values() | 122 | + leaderBoard.forEach((topic, leadership) -> { |
| 121 | - .stream() | 123 | + result.add( |
| 122 | - .sorted(leadershipComparator) | ||
| 123 | - .forEach(l -> | ||
| 124 | - result.add( | ||
| 125 | - mapper.createObjectNode() | ||
| 126 | - .put("topic", l.topic()) | ||
| 127 | - .put("leader", String.valueOf(l.leaderNodeId())) | ||
| 128 | - .put("candidates", l.candidates().toString()) | ||
| 129 | - .put("epoch", l.leader().term()) | ||
| 130 | - .put("epochStartTime", Tools.timeAgo(l.leader().termStartTime())))); | ||
| 131 | - | ||
| 132 | - return result; | ||
| 133 | - } | ||
| 134 | - | ||
| 135 | - /** | ||
| 136 | - * Returns JSON node representing the leaders. | ||
| 137 | - * | ||
| 138 | - * @param leaderBoard map of leaders | ||
| 139 | - */ | ||
| 140 | - private JsonNode json(Map<String, Leadership> leaderBoard, | ||
| 141 | - Map<String, List<NodeId>> candidateBoard) { | ||
| 142 | - ObjectMapper mapper = new ObjectMapper(); | ||
| 143 | - ArrayNode result = mapper.createArrayNode(); | ||
| 144 | - candidateBoard.entrySet() | ||
| 145 | - .stream() | ||
| 146 | - .forEach(es -> { | ||
| 147 | - Leadership l = leaderBoard.get(es.getKey()); | ||
| 148 | - result.add( | ||
| 149 | mapper.createObjectNode() | 124 | mapper.createObjectNode() |
| 150 | - .put("topic", es.getKey()) | 125 | + .put("topic", topic) |
| 151 | - .put("leader", l == null ? "none" : l.leader().toString()) | 126 | + .put("leader", leadership.leaderNodeId() == null ? |
| 152 | - .put("candidates", es.getValue().toString())); | 127 | + "none" : leadership.leaderNodeId().toString()) |
| 153 | - }); | 128 | + .put("term", leadership.leader() != null ? |
| 129 | + leadership.leader().term() : 0) | ||
| 130 | + .put("termStartTime", leadership.leader() != null ? | ||
| 131 | + leadership.leader().termStartTime() : 0) | ||
| 132 | + .put("candidates", leadership.candidates().toString())); | ||
| 133 | + }); | ||
| 154 | return result; | 134 | return result; |
| 155 | } | 135 | } |
| 156 | 136 | ||
| ... | @@ -165,20 +145,15 @@ public class LeaderCommand extends AbstractShellCommand { | ... | @@ -165,20 +145,15 @@ public class LeaderCommand extends AbstractShellCommand { |
| 165 | pattern = Pattern.compile(topicPattern); | 145 | pattern = Pattern.compile(topicPattern); |
| 166 | } | 146 | } |
| 167 | 147 | ||
| 148 | + if (outputJson()) { | ||
| 149 | + print("%s", json(leaderBoard)); | ||
| 150 | + return; | ||
| 151 | + } | ||
| 152 | + | ||
| 168 | if (showCandidates) { | 153 | if (showCandidates) { |
| 169 | - Map<String, List<NodeId>> candidates = leaderService | 154 | + displayCandidates(leaderBoard); |
| 170 | - .getCandidates(); | ||
| 171 | - if (outputJson()) { | ||
| 172 | - print("%s", json(leaderBoard, candidates)); | ||
| 173 | - } else { | ||
| 174 | - displayCandidates(leaderBoard, candidates); | ||
| 175 | - } | ||
| 176 | } else { | 155 | } else { |
| 177 | - if (outputJson()) { | 156 | + displayLeaders(leaderBoard); |
| 178 | - print("%s", json(leaderBoard)); | ||
| 179 | - } else { | ||
| 180 | - displayLeaders(leaderBoard); | ||
| 181 | - } | ||
| 182 | } | 157 | } |
| 183 | } | 158 | } |
| 184 | } | 159 | } | ... | ... |
-
Please register or login to post a comment