aboutsummaryrefslogtreecommitdiffstats
path: root/.i3/py3status/backup/ns_checker.py
blob: 4a332b190bc4ac8a4cccb991fab6f4f81904517a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import dns.resolver
import socket


class Py3status:
    """
    This module launch a simple query on each nameservers for the specified domain.
    Nameservers are dynamically retrieved. The FQDN is the only one mandatory parameter.
    It's also possible to add additional nameservers by appending them in nameservers list.

    The default resolver can be overwritten with my_resolver.nameservers parameter.

    Written and contributed by @nawadanp
    """
    def __init__(self):
        self.domain = 'google.com'
        self.lifetime = 0.3
        self.resolver = []
        self.nameservers = []

    def ns_checker(self, i3status_output_json, i3status_config):
        response = {'full_text': '', 'name': 'ns_checker'}
        position = 0
        counter = 0
        error = False
        nameservers = []

        my_resolver = dns.resolver.Resolver()
        my_resolver.lifetime = self.lifetime
        if self.resolver:
            my_resolver.nameservers = self.resolver

        my_ns = my_resolver.query(self.domain, 'NS')

        # Insert each NS ip address in nameservers
        for ns in my_ns:
            nameservers.append(str(socket.gethostbyname(str(ns))))
        for ns in self.nameservers:
            nameservers.append(str(ns))

        # Perform a simple DNS query, for each NS servers
        for ns in nameservers:
            my_resolver.nameservers = [ns]
            counter += 1
            try:
                my_resolver.query(self.domain, 'A')
            except:
                error = True

        if error:
            response['full_text'] = str(counter) + ' NS NOK'
            response['color'] = i3status_config['color_bad']
        else:
            response['full_text'] = str(counter) + ' NS OK'
            response['color'] = i3status_config['color_good']

        return (position, response)