forked from thesues/py-booth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
conf.py
128 lines (106 loc) · 3.34 KB
/
conf.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# vim: tabstop=4 shiftwidth=4 softtabstop=4 et
from utils import Server, ServerList
import logging
import argparse
import ConfigParser
import sys
server_list =None
myself = None
#default value
test_mode = False
lease_timeout = 60
d_max = 1
require_retry_times = 3
proposer_timeout = 40
renew_internal = 30
client_port = 1234
secret_key = 'booth'
#http://stackoverflow.com/questions/2819696/parsing-properties-file-in-python/2819788#2819788
class FakeSecHead(object):
def __init__(self, fp):
self.fp = fp
self.sechead = '[asection]\n'
def readline(self):
if self.sechead:
try: return self.sechead
finally: self.sechead = None
else: return self.fp.readline()
def initlog(logfile):
log = logging.getLogger()
hdlr = logging.FileHandler(logfile)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
log.addHandler(hdlr)
log.setLevel(logging.NOTSET)
def parse_cmdline(argv):
parser = argparse.ArgumentParser(description='py-booth is an application')
parser.add_argument('-c',dest='config_file',action='store', nargs=1, type=file, help="configuration file")
result = parser.parse_args(argv)
read_conf(result.config_file[0])
def read_conf(config_file):
global log
global server_list
global myself
global client_port
global test_mode
global lease_timeout
global d_max
global require_retry_times
global proposer_timeout
global renew_internal
global secret_key
myid = None
server_list = ServerList()
cp = ConfigParser.SafeConfigParser()
cp.readfp(FakeSecHead(config_file))
##TODO
now_parsing = ''
try:
for k,v in cp.items('asection'):
now_parsing = "%s=%s" % (k, v)
if k == 'client_port':
client_port = int(v)
elif k == 'test_mode':
test_mode = bool(int(v))
elif k =='lease_timeout':
lease_timeout = int(v)
elif k == 'd_max':
d_max = int(v)
elif k == 'require_retry_times':
require_retry_times = int(v)
elif k == 'proposer_timeout':
proposer_timeout = int(v)
elif k == 'renew_internal':
renew_internal = int(v)
elif k == 'myid':
myid = int(v)
elif k == 'secret_key':
secret_key = v
elif k.startswith('server'):
sid = k.split('.')[1]
ip,port = v.split(':')
s = Server(int(sid), ip , int(port))
server_list.add_server(s)
else:
raise Exception('Dont know the key %s', k)
except Exception, e:
print e
print "PARSING %s ERROR" % now_parsing
sys.exit(-1)
finally:
config_file.close()
check_config(myid)
if test_mode:
initlog('server'+str(myid)+'.log')
else:
initlog('server' + '.log')
myself = server_list.get(myid)
def check_config(myid):
try:
if myid not in server_list.keys():
raise Exception("myid %s is not in server_list" % myid)
if renew_internal >= lease_timeout:
raise Exception('renew_internal is bigger than lease timeout')
except Exception, e:
print e
sys.exit(-1)