|
@@ -608,29 +608,44 @@ def ffpb_print_cached_messages (bot):
|
|
|
|
|
|
|
|
|
def _ffpb_aggregate_node_ids (bot, nodes):
|
|
|
- """Aggregate given list of node IDs as far as possbile (read: combine gateways)
|
|
|
+ """Aggregate given list of node IDs as far as possbile (read: combine gw*, lnx*, ...)
|
|
|
and return aggregated and ordered list."""
|
|
|
|
|
|
+ aggr_patterns = ('gw', 'lnx')
|
|
|
+
|
|
|
nodes_temp = {}
|
|
|
nodes_aggr = []
|
|
|
|
|
|
for node in nodes:
|
|
|
- match = re.search ("^gw(\d+)(.*)?$", node)
|
|
|
+ match = re.search ("^([a-z-]+(\d+))(\.([a-z]+)\.?)?.*", node, re.I)
|
|
|
if match:
|
|
|
- expr = re.sub ("^gw(\d+)", "gw##", node)
|
|
|
- if expr not in nodes_temp:
|
|
|
- nodes_temp[expr] = []
|
|
|
+ site = match.group (4) if match.group (4) else None
|
|
|
+
|
|
|
+ expr = match.group (1)
|
|
|
+ for pattern in aggr_patterns:
|
|
|
+ expr = re.sub ("^%s(\d+)" % pattern, "%s##" % pattern, expr)
|
|
|
|
|
|
- nodes_temp[expr].append (match.group (1))
|
|
|
+ if site not in nodes_temp:
|
|
|
+ nodes_temp[site] = {}
|
|
|
+ if expr not in nodes_temp[site]:
|
|
|
+ nodes_temp[site][expr] = []
|
|
|
+
|
|
|
+ nodes_temp[site][expr].append (match.group (2))
|
|
|
continue
|
|
|
|
|
|
nodes_aggr.append (node)
|
|
|
|
|
|
- for node, n_list in nodes_temp.items ():
|
|
|
- if len (n_list) == 1:
|
|
|
- nodes_aggr.append (re.sub ("gw##", "gw%s" % n_list[0], node))
|
|
|
- else:
|
|
|
- nodes_aggr.append (re.sub ("gw##", "gw{%s}" % ",".join (sorted (n_list)), node))
|
|
|
+ for site, hosts in nodes_temp.items ():
|
|
|
+ for node, n_list in hosts.items ():
|
|
|
+ if len (n_list) == 1:
|
|
|
+ node = re.sub ("##", "%s" % n_list[0], node)
|
|
|
+ else:
|
|
|
+ node = re.sub ("##", "{%s}" % ",".join (sorted (n_list)), node)
|
|
|
+
|
|
|
+ if site:
|
|
|
+ node += "." + site
|
|
|
+
|
|
|
+ nodes_aggr.append (node)
|
|
|
|
|
|
return ", ".join (sorted (nodes_aggr))
|
|
|
|