コード例 #1
0
ファイル: utils.py プロジェクト: alexanderfefelov/nav
def track_mac(keys, resultset, dns):
    """Groups results from Query for the mac_search page.

        keys        - a tuple/list with strings that identifies the fields the
                      result should be grouped by
        resultset   - a QuerySet
        dns         - should we lookup the hostname?
    """
    if dns:
        ips_to_lookup = [row.ip for row in resultset]
        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)

    tracker = SortedDict()
    for row in resultset:
        if row.end_time > datetime.now():
            row.still_active = "Still active"
        if dns:
            ip = row.ip
            if dns_lookups[ip] and not isinstance(dns_lookups[ip], Exception):
                row.dns_lookup = dns_lookups[ip].pop()
            else:
                row.dns_lookup = ""
        if not hasattr(row, 'module'):
            row.module = ''
        if not hasattr(row, 'port'):
            row.port = ''
        key = []
        for k in keys:
            key.append(getattr(row, k))
        key = tuple(key)
        if key not in tracker:
            tracker[key] = []
        tracker[key].append(row)
    return tracker
コード例 #2
0
def track_mac(keys, resultset, dns):
    """Groups results from Query for the mac_search page.

        keys        - a tuple/list with strings that identifies the fields the
                      result should be grouped by
        resultset   - a QuerySet
        dns         - should we lookup the hostname?
    """
    if dns:
        ips_to_lookup = [row.ip for row in resultset]
        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)

    tracker = SortedDict()
    for row in resultset:
        if row.end_time > datetime.now():
            row.still_active = "Still active"
        if dns:
            ip = row.ip
            if dns_lookups[ip] and not isinstance(dns_lookups[ip], Exception):
                row.dns_lookup = dns_lookups[ip].pop()
            else:
                row.dns_lookup = ""
        if not hasattr(row, 'module'):
            row.module = ''
        if not hasattr(row, 'port'):
            row.port = ''
        key = []
        for k in keys:
            key.append(getattr(row, k))
        key = tuple(key)
        if key not in tracker:
            tracker[key] = []
        tracker[key].append(row)
    return tracker
コード例 #3
0
ファイル: db.py プロジェクト: ion-plugged/test-NAV
    def execute(self):
        super(AcctSearchQuery, self).execute()
        if self.ips_to_lookup:
            lookup_result = reverse_lookup(self.ips_to_lookup)

            self.result = [
                self._replace_ip_with_hostname(result, lookup_result)
                for result in self.result
            ]
コード例 #4
0
ファイル: host_information.py プロジェクト: plan1230/nav
def reverse_lookup(addresses):
    """Do a reverse lookup on addresses"""
    reverses = asyncdns.reverse_lookup(addresses)
    for addr, response in sorted(reverses.items(), key=address_sorter):
        if isinstance(response, Exception):
            yield {'addr': addr, 'error': response.__class__.__name__}
        else:
            for name in response:
                yield {'addr': addr, 'name': name}
コード例 #5
0
ファイル: db.py プロジェクト: alexanderfefelov/nav
    def execute(self):
        super(AcctSearchQuery, self).execute()
        if self.ips_to_lookup:
            lookup_result = reverse_lookup(self.ips_to_lookup)

            self.result = [
                self._replace_ip_with_hostname(result, lookup_result)
                for result in self.result
            ]
コード例 #6
0
def reverse_lookup(addresses):
    """Do a reverse lookup on addresses"""
    reverses = asyncdns.reverse_lookup(addresses)
    for addr, response in sorted(reverses.items(), key=address_sorter):
        if isinstance(response, Exception):
            yield {'addr': addr, 'error': response.__class__.__name__}
        else:
            for name in response:
                yield {'addr': addr, 'name': name}
コード例 #7
0
ファイル: views.py プロジェクト: bj0rns0der/nav
def create_tracker(active, dns, inactive, ip_range, ip_result):
    """Creates a result tracker based on form data"""
    dns_lookups = None
    if dns:
        ips_to_lookup = [str(ip) for ip in ip_range]
        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)

    tracker = SortedDict()
    for ip_key in ip_range:
        if active and ip_key in ip_result:
            create_active_row(tracker, dns, dns_lookups, ip_key, ip_result)
        elif inactive and ip_key not in ip_result:
            create_inactive_row(tracker, dns, dns_lookups, ip_key)
    return tracker
コード例 #8
0
ファイル: views.py プロジェクト: plan1230/nav
def create_tracker(active, dns, inactive, ip_range, ip_result):
    """Creates a result tracker based on form data"""
    dns_lookups = None
    if dns:
        ips_to_lookup = {str(ip) for ip in ip_range}
        _logger.debug(
            "create_tracker: looking up PTR records for %d addresses)",
            len(ips_to_lookup))
        dns_lookups = asyncdns.reverse_lookup(ips_to_lookup)
        _logger.debug("create_tracker: PTR lookup done")

    tracker = OrderedDict()
    for ip_key in ip_range:
        if active and ip_key in ip_result:
            create_active_row(tracker, dns, dns_lookups, ip_key, ip_result)
        elif inactive and ip_key not in ip_result:
            create_inactive_row(tracker, dns, dns_lookups, ip_key)
    return tracker
コード例 #9
0
ファイル: tests.py プロジェクト: alexanderfefelov/nav
    def _get_errors(self):
        """Fetches duplicate hostnames"""
        ip_addresses = [n.ip for n in Netbox.objects.all()]
        reverse_names = reverse_lookup(ip_addresses)
        flatten = list(itertools.chain(*reverse_names.values()))
        duplicates = set([x for x in flatten if flatten.count(x) > 1])
        results = collections.defaultdict(list)

        for hostname in duplicates:
            for ip, hostlist in reverse_names.items():
                if hostname in hostlist:
                    results[hostname].append(ip)

        errors = []
        for hostname, iplist in results.items():
            error = 'The hostname {} is used by these IP addresses: {}'.format(
                hostname, ', '.join(iplist))
            errors.append(TestResult(error))

        return errors
コード例 #10
0
ファイル: tests.py プロジェクト: wujcheng/nav
    def _get_errors(self):
        """Fetches duplicate hostnames"""
        ip_addresses = [n.ip for n in Netbox.objects.all()]
        reverse_names = reverse_lookup(ip_addresses)
        flatten = list(itertools.chain(*reverse_names.values()))
        duplicates = set([x for x in flatten if flatten.count(x) > 1])
        results = collections.defaultdict(list)

        for hostname in duplicates:
            for ip, hostlist in reverse_names.items():
                if hostname in hostlist:
                    results[hostname].append(ip)

        errors = []
        for hostname, iplist in results.items():
            error = 'The hostname {} is used by these IP addresses: {}'.format(
                hostname, ', '.join(iplist))
            errors.append(TestResult(error))

        return errors
コード例 #11
0
    def _get_errors(self):
        """Fetches duplicate hostnames"""
        ip_addresses = Netbox.objects.values_list("ip", flat=True)
        reverse_names = {
            _key: _value
            for _key, _value in reverse_lookup(ip_addresses).items()
            if not isinstance(_value, Exception)  # Ignore DNS lookup failures
        }
        flatten = list(itertools.chain(*reverse_names.values()))
        duplicates = {x for x in flatten if flatten.count(x) > 1}
        results = collections.defaultdict(list)

        for hostname in duplicates:
            for ip, hostlist in reverse_names.items():
                if hostname in hostlist:
                    results[hostname].append(ip)

        errors = []
        for hostname, iplist in results.items():
            error = 'The hostname {} is used by these IP addresses: {}'.format(
                hostname, ', '.join(iplist))
            errors.append(TestResult(error))

        return errors