#!/usr/bin/python import collections import sys import moira def find_contact(hostname): try: result = moira.query('get_host', hostname.upper(), '*', '*', '*') assert len(result) == 1 return result[0]['contact'] except moira.MoiraException, e: print >>sys.stderr, "Got %s while processing %s" % (e, hostname, ) return "(err)" def find_contacts(hostnames): contact_map = collections.defaultdict(list) for hostname in hostnames: contact = find_contact(hostname) contact_map[contact].append(hostname) return contact_map def print_contacts(contact_map): sorted_map = sorted(contact_map.items(), key=lambda x: len(x[1])) for contact, hosts in sorted_map: print "%s\t%d\t%s" % (contact, len(hosts), hosts) def init(): moira.connect() if __name__ == '__main__': hostnames = [] for line in sys.stdin: hostnames.append(line.strip()) init() contact_map = find_contacts(hostnames) print_contacts(contact_map)