Problem: When set up elastalert in many nodes, you want to generate rules per node following round-robin order.
Suppose you have 3 nodes: [elastalert01, elastalert02, elastalert03]
And 5 rules: [r1, r2, r3, r4, r5].
We need to generate rules to hosts as following order:
elastalert01: r1, r4
elastalert02: r2, r5
elastalert03: r3
This method will help you to do this requirement.
But please think why we need to use LinkedLists for rules instead of List?
`public class Utils {
public static Map<String, List<String>> generateHostRulesMap(List<String> hosts, LinkedList<String> rules) {
Map<String, List<String>> hostRulesMap = new HashMap<>();
while(!rules.isEmpty()) {
for (String host : hosts) {
List<String> rulesPerHost = new ArrayList<>();
if (hostRulesMap.containsKey(host)) {
rulesPerHost = hostRulesMap.get(host);
}
if (!rules.isEmpty()) {
rulesPerHost.add(rules.getFirst());
rules.removeFirst();
hostRulesMap.put(host, rulesPerHost);
}
}
}
return hostRulesMap;
}
}
`
Top comments (0)