DEV Community

Hien Dinh
Hien Dinh

Posted on

Generate Rules to Host in Round-robin Order

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;
}
Enter fullscreen mode Exit fullscreen mode

}
`

Top comments (0)