-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschedule.py
executable file
·90 lines (75 loc) · 2.6 KB
/
schedule.py
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env python
import sys
from time import time
import shelve
from atlas import *
targeting_resolvers = set()
scheduled_resolvers = shelve.open('shelves/resolvers-scheduled.db')
dns_query_resolvers = dns( '_5001._tcp.cheetara.huque.com'
, 'TLSA'
, description = 'Can query TLSA record'
, is_public = True
, do = True
, cd = True
, prepend_probe_id = False
, udp_payload_size = 4096
, retry = 3
)
targeting_8888 = set()
scheduled_8888 = shelve.open('shelves/8888-scheduled.db')
dns_query_8888 = dns( '_5001._tcp.cheetara.huque.com'
, 'TLSA'
, description = 'Can query TLSA record'
, is_public = True
, target = '8.8.8.8'
, recursion_desired = True
, do = True
, cd = True
, prepend_probe_id = False
, udp_payload_size = 4096
, retry = 3
)
def schedule(experiment, dns_query, scheduled, targeting):
print( 'targeting %d probes for experiment %s'
% (len(targeting), experiment))
try:
r = atlas.create( dns_query
, map(int, targeting)
)
except Exception, e:
print(repr(e))
print(e.read())
raise e
print( 'measurement for submitted: %s' % repr(r))
msm_id = r['measurements'][0]
for prb_id in targeting:
scheduled[prb_id] = msm_id
scheduled.sync()
for p in atlas.probe(status=1, limit=100):
prb_id = str(p['id'])
if prb_id not in scheduled_resolvers:
targeting_resolvers.add(prb_id)
if len(targeting_resolvers) == 1000:
schedule( 'resolvers', dns_query_resolvers
, scheduled_resolvers , targeting_resolvers )
targeting_resolvers = set()
if prb_id not in scheduled_8888:
targeting_8888.add(prb_id)
if len(targeting_8888) == 1000:
schedule( '8888', dns_query_8888
, scheduled_8888 , targeting_8888 )
targeting_8888 = set()
if len(targeting_resolvers) > 50:
schedule( 'resolvers', dns_query_resolvers
, scheduled_resolvers , targeting_resolvers )
else:
print('not scheduling resolvers, targeted # probes too small: %d\n'
% len(targeting_resolvers))
if len(targeting_8888) > 50:
schedule( '8888', dns_query_8888
, scheduled_8888 , targeting_8888 )
else:
print('not scheduling 8888, targeted # probes too small: %d\n'
% len(targeting_8888))
scheduled_resolvers.close()
scheduled_8888.close()