]> git.ipfire.org Git - thirdparty/pdns.git/blame - dockerdata/dnsdist-resolver.py
Merge pull request #10160 from chbruyand/structured-logging
[thirdparty/pdns.git] / dockerdata / dnsdist-resolver.py
CommitLineData
c0e0545b
PD
1#!/usr/bin/env python3
2import socket
3import sys
4import threading
5import time
6
7from atomicwrites import atomic_write
8
9class LookupThread(threading.Thread):
10 def run(self):
11 while True:
12 ips = dict()
13 for target in self.targets:
14 addrs = ips.get(target, [])
15
16 try:
17 res = socket.getaddrinfo(target, 0, proto=socket.IPPROTO_UDP)
18 addrs = [item[4][0] for item in res]
19 except socket.gaierror as e:
20 if e.errno in (socket.EAI_NODATA, socket.EAI_NONAME):
21 addrs = []
22
23 ips[target] = addrs
24
25 with atomic_write(self.fname, overwrite=True) as out:
26 out.write('return {\n')
27 for name,addrs in ips.items():
28 out.write(' ["{}"]='.format(name) + '{\n')
29 for addr in addrs:
30 out.write(' "{}",\n'.format(addr))
31 out.write(' },\n')
32 out.write('}\n')
33
34 time.sleep(1)
35
36if __name__ == '__main__':
37 lt = LookupThread()
38 lt.setDaemon(True)
39 lt.targets = []
40 lt.fname = '/tmp/dnsdist-resolver.out'
41 lt.start()
42 for line in sys.stdin:
43 print(line.split())
44 lt.targets=line.split()