Differenze tra le versioni 2 e 4 (in 2 versioni)
4704
Commento:
|
← Versione 4 del 2009-10-18 09:29:25 ⇥
4786
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 4: | Linea 4: |
# Copyright 2006 clauz at ninux dot org # released under the GNU Public License |
1 # Copyright 2006 clauz at ninux dot org
2 # released under the GNU Public License
3 #
4 # OLSR Topology Logger. Dumps dot files from the OLSR dot plugin (http://www.olsr.org).
5 # Usage: olsrtopologylogger.py [-t timeoutseconds] [-s sleepseconds] [{+,-}h]
6 # [-x n] hostname [port]
7 #
8 # -t timeoutseconds set the read timeout to timeoutseconds (default 120).
9 # -s sleepseconds pause sleepseconds between reads (default 300).
10 # +h use human-readable date and time for filenames.
11 # -h use floating point seconds since the epoch for filenames (default).
12 # -x n read and dump to file n times (-1=infinite) (default -1)
13 # hostname the hostname
14 # port the port (default 2004)
15 #
16 # example: olsrtopologylogger.py -x 3 -s 3 localhost
17
18 import telnetlib
19 import time
20 import sys
21
22 params={
23 'PORT':2004, #tcp
24 'HOST':'127.0.0.1',
25 'TIMEOUT':120,
26 'SLEEP':300,
27 'HUMANREADABLE':False,
28 'TIMES':-1,
29 'EXT':'.dot'
30 }
31
32 def readfromdotplugin(host='127.0.0.1',port='2004',timeout=120, exitonerror=True):
33 try:
34 dotcon=telnetlib.Telnet(host,port)
35 except:
36 sys.stderr.write("Error. Can't connect to %s:%s.\n" % (host,port))
37 if exitonerror:
38 sys.exit(2)
39 else:
40 return ""
41 dotoutput=""
42 dotoutput=dotcon.read_until('}',timeout)
43 dotoutput+='\n'
44 dotcon.close()
45 return dotoutput
46 #readfromdotplugin
47
48 def gettimestamp(humanreadable=False):
49 if humanreadable:
50 ts=time.asctime()
51 ts=ts.replace(' ','_')
52 ts=ts.replace(':','.')
53 else:
54 ts=time.time() #seconds since the epoch
55 return ts
56 #gettimestamp
57
58 def processoptions(argvlist,params):
59 if len(argvlist)<2:
60 instructions= "OLSR Topology Logger. Dumps dot files from the OLSR dot plugin (http://www.olsr.org).\n"
61 instructions+="Usage: %s [-t timeoutseconds] [-s sleepseconds] [{+,-}h] \n" % (argvlist[0])
62 instructions+="\t\t[-x n] hostname [port]\n\n"
63 instructions+="\t-t timeoutseconds\tset the read timeout to timeoutseconds (default %d).\n" % (params['TIMEOUT'],)
64 instructions+="\t-s sleepseconds \tpause sleepseconds between reads (default %d).\n" % (params['SLEEP'],)
65 instructions+="\t+h \tuse human-readable date and time for filenames"
66 if params['HUMANREADABLE']:
67 instructions+=" (default).\n"
68 else:
69 instructions+=".\n"
70 instructions+="\t-h \tuse floating point seconds since the epoch for filenames"
71 if not params['HUMANREADABLE']:
72 instructions+=" (default).\n"
73 else:
74 instructions+=".\n"
75 instructions+="\t-x n \tread and dump to file n times (-1=infinite) (default %s)\n" % (params['TIMES'],)
76 instructions+="\thostname \tthe hostname\n"
77 instructions+="\tport \tthe port (default %s)\n" % (params['PORT'],)
78 # print instructions
79 sys.stderr.write(instructions)
80 sys.exit(1)
81 else:
82 i=1
83 while i<len(argvlist):
84 arg=argvlist[i]
85 if arg=='+h':
86 params['HUMANREADABLE']=True
87 elif arg=='-h':
88 params['HUMANREADABLE']=False
89 elif arg=='-t':
90 try:
91 timeoutseconds=argvlist[i+1]
92 params['TIMEOUT']=int(timeoutseconds)
93 i+=1
94 except:
95 pass
96 elif arg=='-s':
97 try:
98 sleepseconds=argvlist[i+1]
99 params['SLEEP']=int(sleepseconds)
100 i+=1
101 except:
102 pass
103 elif arg=='-x':
104 try:
105 n=argvlist[i+1]
106 params['TIMES']=int(n)
107 i+=1
108 except:
109 pass
110 else:
111 params['HOST']=arg
112 try:
113 port=argvlist[i+1]
114 params['PORT']=int(port)
115 i+=1
116 except:
117 pass
118 i+=1
119 #processoptions
120
121
122 if __name__=="__main__":
123
124 processoptions(sys.argv,params)
125
126 try:
127 firstiteration=True
128 iterations=params['TIMES']
129 while iterations==-1 or iterations>0:
130 print "reading..."
131 dotoutput=readfromdotplugin(params['HOST'],params['PORT'],params['TIMEOUT'],firstiteration)
132 firstiteration=False
133 timestamp=gettimestamp(params['HUMANREADABLE'])
134
135 filename='%s' % (timestamp,)
136 filename+=params['EXT']
137
138 try:
139 try:
140 dotfile=file(filename,'r')
141 dotfile.close()
142 erstr="Warning! File %s already exists! Skipping...",(filename,)
143 # sys.stderr.write(erstr)
144 print erstr
145 except IOError:
146 dotfile=file(filename,'w')
147 dotfile.write(dotoutput)
148 dotfile.close()
149 print "%s: %s created." % (time.asctime(),filename)
150 except:
151 sys.stderr.write("I/O Error!!")
152 sys.exit(2)
153
154
155 print "sleeping %d seconds..." % (params['SLEEP'],)
156 time.sleep(params['SLEEP'])
157
158 if iterations>0:
159 iterations-=1
160 #while
161 except KeyboardInterrupt:
162 pass