1462 lines
54 KiB
Diff
1462 lines
54 KiB
Diff
diff -urb lizardfs-3.12.0/src/cgi/cgiserv.py.in lizardfs-3.12.0b/src/cgi/cgiserv.py.in
|
|
--- lizardfs-3.12.0/src/cgi/cgiserv.py.in 2017-12-20 09:59:37.000000000 +0000
|
|
+++ lizardfs-3.12.0b/src/cgi/cgiserv.py.in 2019-08-24 16:25:11.915084539 +0100
|
|
@@ -1,4 +1,4 @@
|
|
-#!/usr/bin/env python2
|
|
+#!/usr/bin/env python3
|
|
import fcntl
|
|
import errno
|
|
import posix
|
|
@@ -10,9 +10,9 @@
|
|
import traceback
|
|
import datetime
|
|
import mimetypes
|
|
-import urlparse
|
|
-import urllib
|
|
-import cStringIO
|
|
+import urllib.parse
|
|
+import urllib.request, urllib.parse, urllib.error
|
|
+import io
|
|
import socket
|
|
import select
|
|
|
|
@@ -142,7 +142,7 @@
|
|
# ============================================================================
|
|
def loop(server,handler,timeout=30):
|
|
while True:
|
|
- k = client_handlers.keys()
|
|
+ k = list(client_handlers.keys())
|
|
# w = sockets to which there is something to send
|
|
# we must test if we can send data
|
|
w = [ cl for cl in client_handlers if client_handlers[cl].writable ]
|
|
@@ -209,7 +209,7 @@
|
|
if (self.protocol == "HTTP/1.1" and close_conn.lower() == "keep-alive"):
|
|
self.close_when_done = False
|
|
# parse the url
|
|
- scheme,netloc,path,params,query,fragment = urlparse.urlparse(self.url)
|
|
+ scheme,netloc,path,params,query,fragment = urllib.parse.urlparse(self.url)
|
|
self.path,self.rest = path,(params,query,fragment)
|
|
|
|
if self.method == 'POST':
|
|
@@ -220,7 +220,7 @@
|
|
# request is incomplete if not all message body received
|
|
if len(body)<content_length:
|
|
return False
|
|
- f_body = cStringIO.StringIO(body)
|
|
+ f_body = io.StringIO(body)
|
|
f_body.seek(0)
|
|
sys.stdin = f_body # compatibility with CGI
|
|
|
|
@@ -246,11 +246,11 @@
|
|
return self.err_resp(403,'Forbidden')
|
|
else:
|
|
fstatdata = os.stat(file_name)
|
|
- if (fstatdata.st_mode & 0170000) == 0040000: # directory
|
|
+ if (fstatdata.st_mode & 0o170000) == 0o040000: # directory
|
|
for index in self.index_files:
|
|
if os.path.exists(file_name+'/'+index) and os.access(file_name+'/'+index,os.R_OK):
|
|
return self.redirect_resp(index)
|
|
- if (fstatdata.st_mode & 0170000) != 0100000:
|
|
+ if (fstatdata.st_mode & 0o170000) != 0o100000:
|
|
return self.err_resp(403,'Forbidden')
|
|
ext = os.path.splitext(file_name)[1]
|
|
c_type = mimetypes.types_map.get(ext,'text/plain')
|
|
@@ -301,14 +301,14 @@
|
|
self.make_cgi_env()
|
|
# redirect print statements to a cStringIO
|
|
save_stdout = sys.stdout
|
|
- sys.stdout = cStringIO.StringIO()
|
|
+ sys.stdout = io.StringIO()
|
|
# run the script
|
|
try:
|
|
- execfile(self.file_name, {})
|
|
+ exec(compile(open(self.file_name, "rb").read(), self.file_name, 'exec'), {})
|
|
except SystemExit:
|
|
pass
|
|
except:
|
|
- sys.stdout = cStringIO.StringIO()
|
|
+ sys.stdout = io.StringIO()
|
|
sys.stdout.write("Content-type:text/plain\r\n\r\n")
|
|
traceback.print_exc(file=sys.stdout)
|
|
response = sys.stdout.getvalue()
|
|
@@ -341,7 +341,7 @@
|
|
env['REQUEST_URI'] = self.url
|
|
env['PATH_TRANSLATED'] = self.translate_path()
|
|
env['SCRIPT_NAME'] = self.path
|
|
- env['PATH_INFO'] = urlparse.urlunparse(("","","",self.rest[0],"",""))
|
|
+ env['PATH_INFO'] = urllib.parse.urlunparse(("","","",self.rest[0],"",""))
|
|
env['QUERY_STRING'] = self.rest[1]
|
|
if not self.host == self.client_address[0]:
|
|
env['REMOTE_HOST'] = self.host
|
|
@@ -376,12 +376,12 @@
|
|
|
|
def mylock(filename):
|
|
try:
|
|
- fd = posix.open(filename,posix.O_RDWR|posix.O_CREAT,0666)
|
|
+ fd = posix.open(filename,posix.O_RDWR|posix.O_CREAT,0o666)
|
|
except IOError:
|
|
return -1
|
|
try:
|
|
fcntl.flock(fd,fcntl.LOCK_EX|fcntl.LOCK_NB)
|
|
- except IOError,ex:
|
|
+ except IOError as ex:
|
|
if ex.errno != errno.EAGAIN:
|
|
posix.close(fd)
|
|
return -1
|
|
@@ -397,38 +397,38 @@
|
|
|
|
def wdlock(fname,runmode,timeout):
|
|
killed = 0
|
|
- for i in xrange(timeout):
|
|
+ for i in range(timeout):
|
|
l = mylock(fname)
|
|
if l==0:
|
|
if runmode==2:
|
|
if killed:
|
|
return 0
|
|
else:
|
|
- print "can't find process to terminate"
|
|
+ print("can't find process to terminate")
|
|
return -1
|
|
if runmode==3:
|
|
- print "mfscgiserv is not running"
|
|
+ print("mfscgiserv is not running")
|
|
return 0
|
|
- print "lockfile created and locked"
|
|
+ print("lockfile created and locked")
|
|
return 1
|
|
elif l<0:
|
|
- print "lockfile error"
|
|
+ print("lockfile error")
|
|
return -1
|
|
else:
|
|
if runmode==3:
|
|
- print "mfscgiserv pid:%u" % l
|
|
+ print("mfscgiserv pid:%u" % l)
|
|
return 0
|
|
if runmode==1:
|
|
- print "can't start: lockfile is already locked by another process"
|
|
+ print("can't start: lockfile is already locked by another process")
|
|
return -1
|
|
if killed!=l:
|
|
- print "sending SIGTERM to lock owner (pid:%u)" % l
|
|
+ print("sending SIGTERM to lock owner (pid:%u)" % l)
|
|
posix.kill(l,signal.SIGTERM)
|
|
killed = l
|
|
if (i%10)==0 and i>0:
|
|
- print "about %u seconds passed and lock still exists" % i
|
|
+ print("about %u seconds passed and lock still exists" % i)
|
|
time.sleep(1)
|
|
- print "about %u seconds passed and lockfile is still locked - giving up" % timeout
|
|
+ print("about %u seconds passed and lockfile is still locked - giving up" % timeout)
|
|
return -1
|
|
|
|
if __name__=="__main__":
|
|
@@ -440,20 +440,20 @@
|
|
rootpath="@CGI_PATH@"
|
|
datapath="@DATA_PATH@"
|
|
|
|
- print
|
|
- print " ######################## ! DEPRECATION WARNING ! #########################"
|
|
- print " # #"
|
|
- print " # mfscgiserv service is deprecated, please use lizardfs-cgiserv instead. #"
|
|
- print " # See manual entry lizardfs-cgiserver(8) for details. #"
|
|
- print " # #"
|
|
- print " ######################## ! DEPRECATION WARNING ! #########################"
|
|
- print
|
|
+ print()
|
|
+ print(" ######################## ! DEPRECATION WARNING ! #########################")
|
|
+ print(" # #")
|
|
+ print(" # mfscgiserv service is deprecated, please use lizardfs-cgiserv instead. #")
|
|
+ print(" # See manual entry lizardfs-cgiserver(8) for details. #")
|
|
+ print(" # #")
|
|
+ print(" ######################## ! DEPRECATION WARNING ! #########################")
|
|
+ print()
|
|
|
|
opts,args = getopt.getopt(sys.argv[1:],"hH:P:R:D:t:fv")
|
|
for opt,val in opts:
|
|
if opt=='-h':
|
|
- print "usage: %s [-H bind_host] [-P bind_port] [-R rootpath] [-D datapath] [-t locktimeout] [-f [-v]] [start|stop|restart|test]\n" % sys.argv[0]
|
|
- print "-H bind_host : local address to listen on (default: any)\n-P bind_port : port to listen on (default: 9425)\n-R rootpath : local path to use as HTTP document root (default: @CGI_PATH@)\n-D datapath : local path to store data eg. lockfile (default: @DATA_PATH@)\n-t locktimeout : how long to wait for lockfile (default: 60s)\n-f : run in foreground\n-v : log requests on stderr"
|
|
+ print("usage: %s [-H bind_host] [-P bind_port] [-R rootpath] [-D datapath] [-t locktimeout] [-f [-v]] [start|stop|restart|test]\n" % sys.argv[0])
|
|
+ print("-H bind_host : local address to listen on (default: any)\n-P bind_port : port to listen on (default: 9425)\n-R rootpath : local path to use as HTTP document root (default: @CGI_PATH@)\n-D datapath : local path to store data eg. lockfile (default: @DATA_PATH@)\n-t locktimeout : how long to wait for lockfile (default: 60s)\n-f : run in foreground\n-v : log requests on stderr")
|
|
sys.exit(0)
|
|
elif opt=='-H':
|
|
host = val
|
|
@@ -493,30 +493,30 @@
|
|
# daemonize
|
|
try:
|
|
pid = os.fork()
|
|
- except OSError, e:
|
|
- raise Exception, "fork error: %s [%d]" % (e.strerror, e.errno)
|
|
+ except OSError as e:
|
|
+ raise Exception("fork error: %s [%d]" % (e.strerror, e.errno))
|
|
if pid>0:
|
|
posix.read(pipefd[0],1)
|
|
os._exit(0)
|
|
os.setsid()
|
|
try:
|
|
pid = os.fork()
|
|
- except OSError, e:
|
|
- raise Exception, "fork error: %s [%d]" % (e.strerror, e.errno)
|
|
+ except OSError as e:
|
|
+ raise Exception("fork error: %s [%d]" % (e.strerror, e.errno))
|
|
posix.write(pipefd[1],'0')
|
|
if pid>0:
|
|
os._exit(0)
|
|
|
|
if wdlock(lockfname,mode,locktimeout)==1:
|
|
|
|
- print "starting simple cgi server (host: %s , port: %u , rootpath: %s)" % (host,port,rootpath)
|
|
+ print("starting simple cgi server (host: %s , port: %u , rootpath: %s)" % (host,port,rootpath))
|
|
|
|
if daemonize:
|
|
os.close(0)
|
|
os.close(1)
|
|
os.close(2)
|
|
if os.open("/dev/null",os.O_RDWR)!=0:
|
|
- raise Exception, "can't open /dev/null as 0 descriptor"
|
|
+ raise Exception("can't open /dev/null as 0 descriptor")
|
|
os.dup2(0,1)
|
|
os.dup2(0,2)
|
|
|
|
@@ -530,9 +530,9 @@
|
|
# launch the server on the specified port
|
|
if not daemonize:
|
|
if host!='any':
|
|
- print "Asynchronous HTTP server running on %s:%s" % (host,port)
|
|
+ print("Asynchronous HTTP server running on %s:%s" % (host,port))
|
|
else:
|
|
- print "Asynchronous HTTP server running on port %s" % port
|
|
+ print("Asynchronous HTTP server running on port %s" % port)
|
|
if not daemonize and verbose:
|
|
HTTP.logging = True
|
|
else:
|
|
diff -urb lizardfs-3.12.0/src/cgi/chart.cgi.in lizardfs-3.12.0b/src/cgi/chart.cgi.in
|
|
--- lizardfs-3.12.0/src/cgi/chart.cgi.in 2017-12-20 09:59:37.000000000 +0000
|
|
+++ lizardfs-3.12.0b/src/cgi/chart.cgi.in 2019-08-24 16:26:28.862416629 +0100
|
|
@@ -1,4 +1,4 @@
|
|
-#!/usr/bin/env python2
|
|
+#!/usr/bin/env python3
|
|
|
|
import socket
|
|
import struct
|
|
@@ -12,18 +12,18 @@
|
|
|
|
fields = cgi.FieldStorage()
|
|
|
|
-if fields.has_key("host"):
|
|
+if "host" in fields:
|
|
host = fields.getvalue("host")
|
|
else:
|
|
host = ''
|
|
-if fields.has_key("port"):
|
|
+if "port" in fields:
|
|
try:
|
|
port = int(fields.getvalue("port"))
|
|
except ValueError:
|
|
port = 0
|
|
else:
|
|
port = 0
|
|
-if fields.has_key("id"):
|
|
+if "id" in fields:
|
|
try:
|
|
chartid = int(fields.getvalue("id"))
|
|
except ValueError:
|
|
@@ -36,7 +36,7 @@
|
|
while totalsent < len(msg):
|
|
sent = socket.send(msg[totalsent:])
|
|
if sent == 0:
|
|
- raise RuntimeError, "socket connection broken"
|
|
+ raise RuntimeError("socket connection broken")
|
|
totalsent = totalsent + sent
|
|
|
|
def myrecv(socket,leng):
|
|
@@ -44,15 +44,15 @@
|
|
while len(msg) < leng:
|
|
chunk = socket.recv(leng-len(msg))
|
|
if chunk == '':
|
|
- raise RuntimeError, "socket connection broken"
|
|
+ raise RuntimeError("socket connection broken")
|
|
msg = msg + chunk
|
|
return msg
|
|
|
|
if host=='' or port==0 or chartid<0:
|
|
- print "Content-Type: image/gif"
|
|
- print
|
|
+ print("Content-Type: image/gif")
|
|
+ print()
|
|
f = open('err.gif')
|
|
- print f.read(),
|
|
+ print(f.read(), end=' ')
|
|
f.close()
|
|
else:
|
|
try:
|
|
@@ -66,32 +66,32 @@
|
|
# data = s.recv(length)
|
|
# print len(data),length
|
|
if data[:3]=="GIF":
|
|
- print "Content-Type: image/gif"
|
|
- print
|
|
- print data,
|
|
+ print("Content-Type: image/gif")
|
|
+ print()
|
|
+ print(data, end=' ')
|
|
elif data[:8]=="\x89PNG\x0d\x0a\x1a\x0a":
|
|
- print "Content-Type: image/png"
|
|
- print
|
|
- print data,
|
|
+ print("Content-Type: image/png")
|
|
+ print()
|
|
+ print(data, end=' ')
|
|
elif data[:9]=="timestamp":
|
|
- print "Content-Type: text"
|
|
- print
|
|
- print data,
|
|
+ print("Content-Type: text")
|
|
+ print()
|
|
+ print(data, end=' ')
|
|
else:
|
|
- print "Content-Type: image/gif"
|
|
+ print("Content-Type: image/gif")
|
|
f = open('err.gif')
|
|
- print f.read(),
|
|
+ print(f.read(), end=' ')
|
|
f.close()
|
|
else:
|
|
- print "Content-Type: image/gif"
|
|
- print
|
|
+ print("Content-Type: image/gif")
|
|
+ print()
|
|
f = open('err.gif')
|
|
- print f.read(),
|
|
+ print(f.read(), end=' ')
|
|
f.close()
|
|
s.close()
|
|
except Exception:
|
|
- print "Content-Type: image/gif"
|
|
- print
|
|
+ print("Content-Type: image/gif")
|
|
+ print()
|
|
f = open('err.gif')
|
|
- print f.read(),
|
|
+ print(f.read(), end=' ')
|
|
f.close()
|
|
Only in lizardfs-3.12.0b/src/cgi: chart.cgi.in.bak
|
|
diff -urb lizardfs-3.12.0/src/cgi/lizardfs-cgiserver.py.in lizardfs-3.12.0b/src/cgi/lizardfs-cgiserver.py.in
|
|
--- lizardfs-3.12.0/src/cgi/lizardfs-cgiserver.py.in 2017-12-20 09:59:37.000000000 +0000
|
|
+++ lizardfs-3.12.0b/src/cgi/lizardfs-cgiserver.py.in 2019-08-24 16:25:32.778174579 +0100
|
|
@@ -1,4 +1,4 @@
|
|
-#!/usr/bin/env python2
|
|
+#!/usr/bin/env python3
|
|
# vim: noexpandtab shiftwidth=4 softtabstop=4 tabstop=4
|
|
|
|
import fcntl
|
|
@@ -13,9 +13,9 @@
|
|
import traceback
|
|
import datetime
|
|
import mimetypes
|
|
-import urlparse
|
|
-import urllib
|
|
-import cStringIO
|
|
+import urllib.parse
|
|
+import urllib.request, urllib.parse, urllib.error
|
|
+import io
|
|
import socket
|
|
import select
|
|
import pwd
|
|
@@ -140,7 +140,7 @@
|
|
# ============================================================================
|
|
def loop(server,handler,timeout=30):
|
|
while True:
|
|
- k = client_handlers.keys()
|
|
+ k = list(client_handlers.keys())
|
|
# w = sockets to which there is something to send
|
|
# we must test if we can send data
|
|
w = [ cl for cl in client_handlers if client_handlers[cl].writable ]
|
|
@@ -207,7 +207,7 @@
|
|
if (self.protocol == "HTTP/1.1" and close_conn.lower() == "keep-alive"):
|
|
self.close_when_done = False
|
|
# parse the url
|
|
- scheme,netloc,path,params,query,fragment = urlparse.urlparse(self.url)
|
|
+ scheme,netloc,path,params,query,fragment = urllib.parse.urlparse(self.url)
|
|
self.path,self.rest = path,(params,query,fragment)
|
|
|
|
if self.method == 'POST':
|
|
@@ -218,7 +218,7 @@
|
|
# request is incomplete if not all message body received
|
|
if len(body)<content_length:
|
|
return False
|
|
- f_body = cStringIO.StringIO(body)
|
|
+ f_body = io.StringIO(body)
|
|
f_body.seek(0)
|
|
sys.stdin = f_body # compatibility with CGI
|
|
|
|
@@ -244,11 +244,11 @@
|
|
return self.err_resp(403,'Forbidden')
|
|
else:
|
|
fstatdata = os.stat(file_name)
|
|
- if (fstatdata.st_mode & 0170000) == 0040000: # directory
|
|
+ if (fstatdata.st_mode & 0o170000) == 0o040000: # directory
|
|
for index in self.index_files:
|
|
if os.path.exists(file_name+'/'+index) and os.access(file_name+'/'+index,os.R_OK):
|
|
return self.redirect_resp(index)
|
|
- if (fstatdata.st_mode & 0170000) != 0100000:
|
|
+ if (fstatdata.st_mode & 0o170000) != 0o100000:
|
|
return self.err_resp(403,'Forbidden')
|
|
ext = os.path.splitext(file_name)[1]
|
|
c_type = mimetypes.types_map.get(ext,'text/plain')
|
|
@@ -299,15 +299,15 @@
|
|
self.make_cgi_env()
|
|
# redirect print statements to a cStringIO
|
|
save_stdout = sys.stdout
|
|
- output_buffer = cStringIO.StringIO()
|
|
+ output_buffer = io.StringIO()
|
|
sys.stdout = output_buffer
|
|
# run the script
|
|
try:
|
|
- execfile(self.file_name, {})
|
|
+ exec(compile(open(self.file_name, "rb").read(), self.file_name, 'exec'), {})
|
|
except SystemExit:
|
|
pass
|
|
except:
|
|
- output_buffer = cStringIO.StringIO()
|
|
+ output_buffer = io.StringIO()
|
|
output_buffer.write("Content-type:text/plain\r\n\r\n")
|
|
traceback.print_exc(file=output_buffer)
|
|
sys.stdout = save_stdout # restore sys.stdout
|
|
@@ -340,7 +340,7 @@
|
|
env['REQUEST_URI'] = self.url
|
|
env['PATH_TRANSLATED'] = self.translate_path()
|
|
env['SCRIPT_NAME'] = self.path
|
|
- env['PATH_INFO'] = urlparse.urlunparse(("","","",self.rest[0],"",""))
|
|
+ env['PATH_INFO'] = urllib.parse.urlunparse(("","","",self.rest[0],"",""))
|
|
env['QUERY_STRING'] = self.rest[1]
|
|
if not self.host == self.client_address[0]:
|
|
env['REMOTE_HOST'] = self.host
|
|
@@ -447,13 +447,13 @@
|
|
opts,args = getopt.getopt(sys.argv[1:],"vhH:P:R:p:u:")
|
|
for opt, val in opts:
|
|
if opt == '-h':
|
|
- print "usage: %s [-H bind_host] [-P bind_port] [-R rootpath] [-v]\n" % sys.argv[0]
|
|
- print "-H bind_host : local address to listen on (default: any)"
|
|
- print "-P bind_port : port to listen on (default: 9425)"
|
|
- print "-R rootpath : local path to use as HTTP document root (default: @CGI_PATH@)"
|
|
- print "-v : log requests on stderr"
|
|
- print "-p : pidfile path, setting it triggers manual daemonization"
|
|
- print "-u : username of server owner, used in manual daemonization"
|
|
+ print("usage: %s [-H bind_host] [-P bind_port] [-R rootpath] [-v]\n" % sys.argv[0])
|
|
+ print("-H bind_host : local address to listen on (default: any)")
|
|
+ print("-P bind_port : port to listen on (default: 9425)")
|
|
+ print("-R rootpath : local path to use as HTTP document root (default: @CGI_PATH@)")
|
|
+ print("-v : log requests on stderr")
|
|
+ print("-p : pidfile path, setting it triggers manual daemonization")
|
|
+ print("-u : username of server owner, used in manual daemonization")
|
|
sys.exit(0)
|
|
elif opt == '-H':
|
|
host = val
|
|
@@ -471,9 +471,9 @@
|
|
# launch the server on the specified port
|
|
server = Server(host, port)
|
|
if host != 'any':
|
|
- print "Asynchronous HTTP server running on %s:%s" % (host,port)
|
|
+ print("Asynchronous HTTP server running on %s:%s" % (host,port))
|
|
else:
|
|
- print "Asynchronous HTTP server running on port %s" % port
|
|
+ print("Asynchronous HTTP server running on port %s" % port)
|
|
if verbose:
|
|
HTTP.logging = True
|
|
else:
|
|
diff -urb lizardfs-3.12.0/src/cgi/mfs.cgi.in lizardfs-3.12.0b/src/cgi/mfs.cgi.in
|
|
--- lizardfs-3.12.0/src/cgi/mfs.cgi.in 2017-12-20 09:59:37.000000000 +0000
|
|
+++ lizardfs-3.12.0b/src/cgi/mfs.cgi.in 2019-08-24 16:25:01.217038306 +0100
|
|
@@ -1,11 +1,11 @@
|
|
-#!/usr/bin/env python2
|
|
+#!/usr/bin/env python3
|
|
# vim: noexpandtab shiftwidth=4 softtabstop=4 tabstop=4
|
|
|
|
import socket
|
|
import struct
|
|
import time
|
|
import traceback
|
|
-import urllib
|
|
+import urllib.request, urllib.parse, urllib.error
|
|
import cgi
|
|
import cgitb
|
|
import sys
|
|
@@ -57,7 +57,7 @@
|
|
fields = cgi.FieldStorage()
|
|
|
|
try:
|
|
- if fields.has_key("masterhost"):
|
|
+ if "masterhost" in fields:
|
|
masterhost = fields.getvalue("masterhost")
|
|
else:
|
|
masterhost = socket.gethostbyname('mfsmaster')
|
|
@@ -68,7 +68,7 @@
|
|
except Exception:
|
|
masterport = 9421
|
|
try:
|
|
- if fields.has_key("mastername"):
|
|
+ if "mastername" in fields:
|
|
mastername = fields.getvalue("mastername")
|
|
else:
|
|
mastername = 'LizardFS'
|
|
@@ -122,7 +122,7 @@
|
|
head = deserialize_dict(buffer, tree[1], tree[2])
|
|
head_len = 3
|
|
else:
|
|
- raise RuntimeError, "Unknown tree to deserialize: {0}".format(tree)
|
|
+ raise RuntimeError("Unknown tree to deserialize: {0}".format(tree))
|
|
if (len(tree) > head_len):
|
|
tail = deserialize(buffer, tree[head_len:], True)
|
|
return (head,) + tail
|
|
@@ -147,7 +147,7 @@
|
|
""" Deserialize a std::string and remove it from buffer """
|
|
length = deserialize_primitive(buffer, "L")
|
|
if len(buffer) < length or buffer[length - 1] != 0:
|
|
- raise RuntimeError, "malformed message; cannot deserialize"
|
|
+ raise RuntimeError("malformed message; cannot deserialize")
|
|
ret = str(buffer[0:length-1])
|
|
del buffer[0:length]
|
|
return ret
|
|
@@ -155,13 +155,13 @@
|
|
def deserialize_list(buffer, element_tree):
|
|
""" Deserialize a list of elements and remove it from buffer """
|
|
length = deserialize_primitive(buffer, "L")
|
|
- return [deserialize(buffer, element_tree) for i in xrange(length)]
|
|
+ return [deserialize(buffer, element_tree) for i in range(length)]
|
|
|
|
def deserialize_dict(buffer, key_tree, value_tree):
|
|
""" Deserialize a dict and remove it from buffer """
|
|
length = deserialize_primitive(buffer, "L")
|
|
ret = {}
|
|
- for i in xrange(length):
|
|
+ for i in range(length):
|
|
key = deserialize(buffer, key_tree)
|
|
val = deserialize(buffer, value_tree)
|
|
ret[key] = val
|
|
@@ -180,14 +180,14 @@
|
|
def cltoma_list_goals():
|
|
if masterversion < LIZARDFS_VERSION_WITH_CUSTOM_GOALS:
|
|
# For old servers just return the default 10 goals
|
|
- return [(i, str(i), str(i) + "*_") for i in xrange(1, 10)]
|
|
+ return [(i, str(i), str(i) + "*_") for i in range(1, 10)]
|
|
else:
|
|
# For new servers, use LIZ_CLTOMA_LIST_GOALS to fetch the list of goal definitions
|
|
request = make_liz_message(LIZ_CLTOMA_LIST_GOALS, 0, "\1")
|
|
response = send_and_receive(masterhost, masterport, request, LIZ_MATOCL_LIST_GOALS, 0)
|
|
goals = deserialize(response, List(Primitive("H") + 2 * String))
|
|
if response:
|
|
- raise RuntimeError, "malformed LIZ_MATOCL_LIST_GOALS response (too long by {0} bytes)".format(len(response))
|
|
+ raise RuntimeError("malformed LIZ_MATOCL_LIST_GOALS response (too long by {0} bytes)".format(len(response)))
|
|
return goals
|
|
|
|
def cltoma_chunks_health(only_regular):
|
|
@@ -198,7 +198,7 @@
|
|
safe, endangered, lost = deserialize(response, 3 * Dict(Primitive("B"), Primitive("Q")))
|
|
raw_replication, raw_deletion = deserialize(response, 2 * Dict(Primitive("B"), Tuple(11 * "Q")))
|
|
if response:
|
|
- raise RuntimeError, "malformed LIZ_MATOCL_CHUNKS_HEALTH response (too long by {0} bytes)".format(len(response))
|
|
+ raise RuntimeError("malformed LIZ_MATOCL_CHUNKS_HEALTH response (too long by {0} bytes)".format(len(response)))
|
|
availability, replication, deletion = [], [], []
|
|
for (id, name, _) in goals:
|
|
availability.append((name, safe.setdefault(id, 0), endangered.setdefault(id, 0), lost.setdefault(id, 0)))
|
|
@@ -236,7 +236,7 @@
|
|
for (addr, port, v1, v2, v3) in servers:
|
|
# for shadow masters, addr is int (4 bytes) -- convert it to string.
|
|
# for the active master we use "masterhost" to connect with it and we don't know the real IP
|
|
- ip = addr_to_host(addr) if isinstance(addr, (int, long)) else "-"
|
|
+ ip = addr_to_host(addr) if isinstance(addr, int) else "-"
|
|
version = "%u.%u.%u" % (v1, v2, v3)
|
|
if port == 0:
|
|
# shadow didn't register its port yet
|
|
@@ -267,14 +267,14 @@
|
|
return str.replace('&','&').replace('<','<').replace('>','>').replace("'",''').replace('"','"')
|
|
|
|
def urlescape(str):
|
|
- return urllib.quote_plus(str)
|
|
+ return urllib.parse.quote_plus(str)
|
|
|
|
def mysend(socket,msg):
|
|
totalsent = 0
|
|
while totalsent < len(msg):
|
|
sent = socket.send(msg[totalsent:])
|
|
if sent == 0:
|
|
- raise RuntimeError, "socket connection broken"
|
|
+ raise RuntimeError("socket connection broken")
|
|
totalsent = totalsent + sent
|
|
|
|
def myrecv(socket,leng):
|
|
@@ -282,18 +282,18 @@
|
|
while len(msg) < leng:
|
|
chunk = socket.recv(leng-len(msg))
|
|
if chunk == '':
|
|
- raise RuntimeError, "socket connection broken"
|
|
+ raise RuntimeError("socket connection broken")
|
|
msg = msg + chunk
|
|
return msg
|
|
|
|
def addr_to_host(addr):
|
|
""" Convert IP address ('xxx.xxx.xxx.xxx' or 'hostname' or a 4-byte integer) to string """
|
|
- if isinstance(addr, (int, long)):
|
|
+ if isinstance(addr, int):
|
|
return socket.inet_ntoa(struct.pack(">L", addr))
|
|
elif isinstance(addr, str):
|
|
return addr
|
|
else:
|
|
- raise RuntimeError, "unknown format of server address"
|
|
+ raise RuntimeError("unknown format of server address")
|
|
|
|
|
|
def send_and_receive(host, port, request, response_type, response_version = None):
|
|
@@ -305,7 +305,7 @@
|
|
header = myrecv(s, 8)
|
|
cmd, length = struct.unpack(">LL", header)
|
|
if cmd != response_type:
|
|
- raise RuntimeError, "received wrong response (%x instead of %x)" % (cmd, response_type)
|
|
+ raise RuntimeError("received wrong response (%x instead of %x)" % (cmd, response_type))
|
|
data = bytearray(myrecv(s, length))
|
|
except:
|
|
s.close()
|
|
@@ -314,7 +314,7 @@
|
|
if response_version is not None:
|
|
version = deserialize_primitive(data, "L")
|
|
if version != response_version:
|
|
- raise RuntimeError, "received wrong response version (%u instead of %u)" % (version, response_version)
|
|
+ raise RuntimeError("received wrong response version (%u instead of %u)" % (version, response_version))
|
|
return data
|
|
|
|
def decimal_number(number,sep=' '):
|
|
@@ -382,43 +382,43 @@
|
|
elif length==68 or length==76:
|
|
masterversion = struct.unpack(">HBB",data[:4])
|
|
except Exception:
|
|
- print "Content-Type: text/html; charset=UTF-8"
|
|
- print
|
|
- print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
|
|
- print """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">"""
|
|
- print """<head>"""
|
|
- print """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"""
|
|
- print """<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername))
|
|
- print """<link href="favicon.ico" rel="icon" type="image/x-icon" />"""
|
|
- print """<link rel="stylesheet" href="mfs.css" type="text/css" />"""
|
|
- print """<script type="text/javascript">changemaster = function() {
|
|
+ print("Content-Type: text/html; charset=UTF-8")
|
|
+ print()
|
|
+ print("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""")
|
|
+ print("""<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">""")
|
|
+ print("""<head>""")
|
|
+ print("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />""")
|
|
+ print("""<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername)))
|
|
+ print("""<link href="favicon.ico" rel="icon" type="image/x-icon" />""")
|
|
+ print("""<link rel="stylesheet" href="mfs.css" type="text/css" />""")
|
|
+ print("""<script type="text/javascript">changemaster = function() {
|
|
window.location="mfs.cgi?masterhost=" + document.getElementById("masterhost").value + "&masterport=" + document.getElementById("masterport").value }
|
|
- </script>"""
|
|
- print """</head>"""
|
|
- print """<body>"""
|
|
- print """<h1 align="center">Can't connect to LizardFS master (IP:%s ; PORT:%u)</h1>""" % (htmlentities(masterhost),masterport)
|
|
- print """<h2 align="center">Please enter alternative master address:"""
|
|
- print """<input type="text" id="masterhost" value="mfsmaster" size="32" /><input type="number" id="masterport" size="6" value="9421" />"""
|
|
- print """<input type="button" value="Go" onclick="changemaster()" /></h2>"""
|
|
- print """</body>"""
|
|
- print """</html>"""
|
|
+ </script>""")
|
|
+ print("""</head>""")
|
|
+ print("""<body>""")
|
|
+ print("""<h1 align="center">Can't connect to LizardFS master (IP:%s ; PORT:%u)</h1>""" % (htmlentities(masterhost),masterport))
|
|
+ print("""<h2 align="center">Please enter alternative master address:""")
|
|
+ print("""<input type="text" id="masterhost" value="mfsmaster" size="32" /><input type="number" id="masterport" size="6" value="9421" />""")
|
|
+ print("""<input type="button" value="Go" onclick="changemaster()" /></h2>""")
|
|
+ print("""</body>""")
|
|
+ print("""</html>""")
|
|
exit()
|
|
|
|
if masterversion==(0,0,0):
|
|
- print "Content-Type: text/html; charset=UTF-8"
|
|
- print
|
|
- print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
|
|
- print """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">"""
|
|
- print """<head>"""
|
|
- print """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"""
|
|
- print """<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername))
|
|
- print """<link href="favicon.ico" rel="icon" type="image/x-icon" />"""
|
|
- print """<link rel="stylesheet" href="mfs.css" type="text/css" />"""
|
|
- print """</head>"""
|
|
- print """<body>"""
|
|
- print """<h1 align="center">Can't detect LizardFS master version</h1>"""
|
|
- print """</body>"""
|
|
- print """</html>"""
|
|
+ print("Content-Type: text/html; charset=UTF-8")
|
|
+ print()
|
|
+ print("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""")
|
|
+ print("""<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">""")
|
|
+ print("""<head>""")
|
|
+ print("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />""")
|
|
+ print("""<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername)))
|
|
+ print("""<link href="favicon.ico" rel="icon" type="image/x-icon" />""")
|
|
+ print("""<link rel="stylesheet" href="mfs.css" type="text/css" />""")
|
|
+ print("""</head>""")
|
|
+ print("""<body>""")
|
|
+ print("""<h1 align="center">Can't detect LizardFS master version</h1>""")
|
|
+ print("""</body>""")
|
|
+ print("""</html>""")
|
|
exit()
|
|
|
|
|
|
@@ -427,7 +427,7 @@
|
|
for k in fields:
|
|
if k not in update:
|
|
c.append("%s=%s" % (k,urlescape(fields.getvalue(k))))
|
|
- for k,v in update.iteritems():
|
|
+ for k,v in update.items():
|
|
if v!="":
|
|
c.append("%s=%s" % (k,urlescape(v)))
|
|
return "mfs.cgi?%s" % ("&".join(c))
|
|
@@ -446,13 +446,13 @@
|
|
return createlink({revname:"1"}) if orderval==columnid and revval==0 else createlink({ordername:str(columnid),revname:"0"})
|
|
|
|
# commands
|
|
-if fields.has_key("CSremove"):
|
|
+if "CSremove" in fields:
|
|
cmd_success = 0
|
|
tracedata = ""
|
|
try:
|
|
serverdata = fields.getvalue("CSremove").split(":")
|
|
if len(serverdata)==2:
|
|
- csip = map(int,serverdata[0].split("."))
|
|
+ csip = list(map(int,serverdata[0].split(".")))
|
|
csport = int(serverdata[1])
|
|
if len(csip)==4:
|
|
s = socket.socket()
|
|
@@ -466,45 +466,45 @@
|
|
tracedata = traceback.format_exc()
|
|
url = createlink({"CSremove":""})
|
|
if cmd_success:
|
|
- print "Status: 302 Found"
|
|
- print "Location: %s" % url.replace("&","&")
|
|
- print "Content-Type: text/html; charset=UTF-8"
|
|
- print
|
|
- print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
|
|
- print """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">"""
|
|
- print """<head>"""
|
|
- print """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"""
|
|
- print """<meta http-equiv="Refresh" content="0; url=%s" />""" % url
|
|
- print """<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername))
|
|
- print """<link href="favicon.ico" rel="icon" type="image/x-icon" />"""
|
|
- print """<link rel="stylesheet" href="mfs.css" type="text/css" />"""
|
|
- print """</head>"""
|
|
- print """<body>"""
|
|
- print """<h1 align="center"><a href="%s">If you see this then it means that redirection didn't work, so click here</a></h1>"""
|
|
- print """</body>"""
|
|
- print """</html>"""
|
|
- else:
|
|
- print "Content-Type: text/html; charset=UTF-8"
|
|
- print
|
|
- print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
|
|
- print """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">"""
|
|
- print """<head>"""
|
|
- print """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"""
|
|
- print """<meta http-equiv="Refresh" content="5; url=%s" />""" % url
|
|
- print """<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername))
|
|
- print """<link href="favicon.ico" rel="icon" type="image/x-icon" />"""
|
|
- print """<link rel="stylesheet" href="mfs.css" type="text/css" />"""
|
|
- print """</head>"""
|
|
- print """<body>"""
|
|
- print """<h3 align="center">Can't remove server (%s) from list - wait 5 seconds for refresh</h3>""" % fields.getvalue("CSremove")
|
|
+ print("Status: 302 Found")
|
|
+ print("Location: %s" % url.replace("&","&"))
|
|
+ print("Content-Type: text/html; charset=UTF-8")
|
|
+ print()
|
|
+ print("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""")
|
|
+ print("""<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">""")
|
|
+ print("""<head>""")
|
|
+ print("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />""")
|
|
+ print("""<meta http-equiv="Refresh" content="0; url=%s" />""" % url)
|
|
+ print("""<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername)))
|
|
+ print("""<link href="favicon.ico" rel="icon" type="image/x-icon" />""")
|
|
+ print("""<link rel="stylesheet" href="mfs.css" type="text/css" />""")
|
|
+ print("""</head>""")
|
|
+ print("""<body>""")
|
|
+ print("""<h1 align="center"><a href="%s">If you see this then it means that redirection didn't work, so click here</a></h1>""")
|
|
+ print("""</body>""")
|
|
+ print("""</html>""")
|
|
+ else:
|
|
+ print("Content-Type: text/html; charset=UTF-8")
|
|
+ print()
|
|
+ print("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""")
|
|
+ print("""<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">""")
|
|
+ print("""<head>""")
|
|
+ print("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />""")
|
|
+ print("""<meta http-equiv="Refresh" content="5; url=%s" />""" % url)
|
|
+ print("""<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername)))
|
|
+ print("""<link href="favicon.ico" rel="icon" type="image/x-icon" />""")
|
|
+ print("""<link rel="stylesheet" href="mfs.css" type="text/css" />""")
|
|
+ print("""</head>""")
|
|
+ print("""<body>""")
|
|
+ print("""<h3 align="center">Can't remove server (%s) from list - wait 5 seconds for refresh</h3>""" % fields.getvalue("CSremove"))
|
|
if tracedata:
|
|
- print """<hr />"""
|
|
- print """<pre>%s</pre>""" % tracedata
|
|
- print """</body>"""
|
|
- print """</html>"""
|
|
+ print("""<hr />""")
|
|
+ print("""<pre>%s</pre>""" % tracedata)
|
|
+ print("""</body>""")
|
|
+ print("""</html>""")
|
|
exit()
|
|
|
|
-if fields.has_key("sections"):
|
|
+if "sections" in fields:
|
|
sectionstr = fields.getvalue("sections")
|
|
sectionset = set(sectionstr.split("|"))
|
|
else:
|
|
@@ -550,53 +550,53 @@
|
|
sectionorder=["IN","CH","CS","HD","EX","MS","MO","MC","CC","HELP"];
|
|
|
|
|
|
-print "Content-Type: text/html; charset=UTF-8"
|
|
-print
|
|
+print("Content-Type: text/html; charset=UTF-8")
|
|
+print()
|
|
# print """<!-- Put IE into quirks mode -->
|
|
-print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
|
|
-print """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">"""
|
|
-print """<head>"""
|
|
-print """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"""
|
|
-print """<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername))
|
|
-print """<link href="favicon.ico" rel="icon" type="image/x-icon" />"""
|
|
-print """<link rel="stylesheet" href="mfs.css" type="text/css" />"""
|
|
-print """</head>"""
|
|
-print """<body>"""
|
|
+print("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""")
|
|
+print("""<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">""")
|
|
+print("""<head>""")
|
|
+print("""<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />""")
|
|
+print("""<title>LizardFS Info (%s)</title>""" % (htmlentities(mastername)))
|
|
+print("""<link href="favicon.ico" rel="icon" type="image/x-icon" />""")
|
|
+print("""<link rel="stylesheet" href="mfs.css" type="text/css" />""")
|
|
+print("""</head>""")
|
|
+print("""<body>""")
|
|
|
|
#MENUBAR
|
|
-print """<div id="header">"""
|
|
-print """<table class="HDR" cellpadding="0" cellspacing="0" border="0" summary="Page header">"""
|
|
-print """<tr>"""
|
|
-print """<td class="LOGO"><a href="http://www.lizardfs.org"><img src="logomini.png" alt="logo" style="border:0;width:123px;height:47px" /></a></td>"""
|
|
-print """<td class="MENU"><table class="MENU" cellspacing="0" summary="Header menu">"""
|
|
-print """<tr>"""
|
|
+print("""<div id="header">""")
|
|
+print("""<table class="HDR" cellpadding="0" cellspacing="0" border="0" summary="Page header">""")
|
|
+print("""<tr>""")
|
|
+print("""<td class="LOGO"><a href="http://www.lizardfs.org"><img src="logomini.png" alt="logo" style="border:0;width:123px;height:47px" /></a></td>""")
|
|
+print("""<td class="MENU"><table class="MENU" cellspacing="0" summary="Header menu">""")
|
|
+print("""<tr>""")
|
|
last="U"
|
|
for k in sectionorder:
|
|
if k==sectionorder[-1]:
|
|
last = "L%s" % last
|
|
if k in sectionset:
|
|
if len(sectionset)<=1:
|
|
- print """<td class="%sS">%s −</td>""" % (last,sectiondef[k])
|
|
+ print("""<td class="%sS">%s −</td>""" % (last,sectiondef[k]))
|
|
else:
|
|
- print """<td class="%sS"><a href="%s">%s</a> <a href="%s">−</a></td>""" % (last,createlink({"sections":k}),sectiondef[k],createlink({"sections":"|".join(sectionset-set([k]))}))
|
|
+ print("""<td class="%sS"><a href="%s">%s</a> <a href="%s">−</a></td>""" % (last,createlink({"sections":k}),sectiondef[k],createlink({"sections":"|".join(sectionset-set([k]))})))
|
|
last="S"
|
|
else:
|
|
- print """<td class="%sU"><a href="%s">%s</a> <a href="%s">+</a></td>""" % (last,createlink({"sections":k}),sectiondef[k],createlink({"sections":"|".join(sectionset|set([k]))}))
|
|
+ print("""<td class="%sU"><a href="%s">%s</a> <a href="%s">+</a></td>""" % (last,createlink({"sections":k}),sectiondef[k],createlink({"sections":"|".join(sectionset|set([k]))})))
|
|
last="U"
|
|
-print """</tr>"""
|
|
-print """</table></td>"""
|
|
-print """<td class="FILLER" style="white-space:nowrap;">"""
|
|
-print """</td>"""
|
|
-print """</tr>"""
|
|
-print """</table>"""
|
|
-print """</div>"""
|
|
+print("""</tr>""")
|
|
+print("""</table></td>""")
|
|
+print("""<td class="FILLER" style="white-space:nowrap;">""")
|
|
+print("""</td>""")
|
|
+print("""</tr>""")
|
|
+print("""</table>""")
|
|
+print("""</div>""")
|
|
|
|
#print """<div id="footer">
|
|
#Moose File System by Jakub Kruszona-Zawadzki
|
|
#</div>
|
|
#"""
|
|
|
|
-print """<div id="container">"""
|
|
+print("""<div id="container">""")
|
|
|
|
if "IN" in sectionset:
|
|
try:
|
|
@@ -752,15 +752,15 @@
|
|
out.append(""" <tr><td align="left">unrecognized answer from LizardFS master</td></tr>""")
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if masterversion>=(1,5,13):
|
|
try:
|
|
@@ -775,7 +775,7 @@
|
|
cmd,length = struct.unpack(">LL",header)
|
|
if cmd==MATOCL_CHUNKS_MATRIX and length==484:
|
|
matrix = []
|
|
- for i in xrange(11):
|
|
+ for i in range(11):
|
|
data = myrecv(s,44)
|
|
matrix.append(list(struct.unpack(">LLLLLLLLLLL",data)))
|
|
out.append("""<table class="FR" cellspacing="0" summary="Chunks state matrix">""")
|
|
@@ -803,13 +803,13 @@
|
|
out.append(""" </tr>""")
|
|
classsum = 7*[0]
|
|
sumlist = 11*[0]
|
|
- for neededCopies in xrange(11):
|
|
+ for neededCopies in range(11):
|
|
out.append(""" <tr>""")
|
|
if neededCopies==10:
|
|
out.append(""" <td align="center">10+</td>""")
|
|
else:
|
|
out.append(""" <td align="center">%u</td>""" % neededCopies)
|
|
- for vc in xrange(11):
|
|
+ for vc in range(11):
|
|
if neededCopies==0:
|
|
if vc==0:
|
|
cl = "DELETEREADY"
|
|
@@ -847,22 +847,22 @@
|
|
sumlist = [ a + b for (a,b) in zip(sumlist,matrix[neededCopies])]
|
|
out.append(""" <tr>""")
|
|
out.append(""" <td align="center">all 1+</td>""")
|
|
- for vc in xrange(11):
|
|
+ for vc in range(11):
|
|
out.append(""" <td align="right">%u</td>""" % sumlist[vc])
|
|
out.append(""" <td align="right">%u</td>""" % sum(sumlist))
|
|
out.append(""" </tr>""")
|
|
out.append(""" <tr><td colspan="13">""" + " / ".join(["""<span class="%sBOX"><!-- --></span> - %s (<span class="%s">%u</span>)""" % (cl,desc,cl,classsum[clidx]) for clidx,cl,desc in [(0,"MISSING","missing"),(1,"ENDANGERED","endangered"),(2,"UNDERGOAL","undergoal"),(3,"NORMAL","stable"),(4,"OVERGOAL","overgoal"),(5,"DELETEPENDING","pending deletion"),(6,"DELETEREADY","ready to be removed")]]) + """</td></tr>""")
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
try:
|
|
out = []
|
|
@@ -908,15 +908,15 @@
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
try:
|
|
out = []
|
|
@@ -957,7 +957,7 @@
|
|
else:
|
|
out.append(""" <tr><th colspan="8">Important messages:</th></tr>""")
|
|
out.append(""" <tr>""")
|
|
- out.append(""" <td colspan="8" align="left"><small><pre>%s</pre></small></td>""" % (urllib.unquote(data[36:]).replace("&","&").replace(">",">").replace("<","<")))
|
|
+ out.append(""" <td colspan="8" align="left"><small><pre>%s</pre></small></td>""" % (urllib.parse.unquote(data[36:]).replace("&","&").replace(">",">").replace("<","<")))
|
|
out.append(""" </tr>""")
|
|
else:
|
|
out.append(""" <tr>""")
|
|
@@ -965,15 +965,15 @@
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "CH" in sectionset:
|
|
try:
|
|
@@ -998,7 +998,7 @@
|
|
out.append(make_table_row('<th class="PERC20">', '</th>', headers))
|
|
sums = 3 * [0]
|
|
i = 0
|
|
- for goal, safe, endangered, lost in filter(lambda row: sum(row[1:]) > 0, availability):
|
|
+ for goal, safe, endangered, lost in [row for row in availability if sum(row[1:]) > 0]:
|
|
out.append(""" <tr class="%s">""" % ("C1" if i % 2 == 0 else "C2"))
|
|
i += 1
|
|
out.append((""" <th class="LEFT">%s</th>""" + 4 * """<td>%s</td>""") %
|
|
@@ -1009,7 +1009,7 @@
|
|
make_cell(lost, "MISSING"))
|
|
)
|
|
out.append(""" </tr>""")
|
|
- sums = map(sum, zip(sums, [safe, endangered, lost])) # add row to the summary
|
|
+ sums = list(map(sum, list(zip(sums, [safe, endangered, lost])))) # add row to the summary
|
|
# Add summary and end the table
|
|
out.append(""" <tr>""")
|
|
out.append((""" <th>all</th>""" + 4 * """<th>%s</th>""") %
|
|
@@ -1029,14 +1029,14 @@
|
|
)
|
|
i = 0
|
|
sums = 11 * [0]
|
|
- for row in filter(lambda row: sum(row[1:]) > 0, table):
|
|
+ for row in [row for row in table if sum(row[1:]) > 0]:
|
|
out.append(""" <tr class="%s">""" % ("C1" if i % 2 == 0 else "C2"))
|
|
i += 1
|
|
out.append((""" <th class="LEFT">%s</th>""" + 11 * """<td>%s</td>""") %
|
|
((row[0], make_cell(row[1], "NORMAL")) + tuple(map(make_cell, row[2:])))
|
|
)
|
|
out.append(""" </tr>""")
|
|
- sums = map(sum, zip(sums, row[1:])) # add row to the summary
|
|
+ sums = list(map(sum, list(zip(sums, row[1:])))) # add row to the summary
|
|
# Add summary and end the table
|
|
out.append(""" <tr>""")
|
|
out.append((""" <th>all</th>""" + 11 * """<th>%s</th>""") % tuple(map(make_cell, sums)))
|
|
@@ -1047,14 +1047,14 @@
|
|
add_repl_del_state(out, "replicat", replication)
|
|
out.append("""<br/>""")
|
|
add_repl_del_state(out, "delet", deletion)
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
- print """<br/>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
+ print("""<br/>""")
|
|
|
|
if "CS" in sectionset:
|
|
if masterversion >= LIZARDFS_VERSION_WITH_LIST_OF_SHADOWS:
|
|
@@ -1091,14 +1091,14 @@
|
|
out.append(make_table_row('<td>', '</td>', (i,) + row))
|
|
i += 1
|
|
out.append("""</table>""")
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
- print """<br/>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
+ print("""<br/>""")
|
|
|
|
out = []
|
|
|
|
@@ -1157,7 +1157,7 @@
|
|
else:
|
|
vector_size = length / 54
|
|
pos = 0
|
|
- for i in xrange(vector_size):
|
|
+ for i in range(vector_size):
|
|
if cmd==LIZ_MATOCL_CSERV_LIST:
|
|
disconnected,v1,v2,v3,ip1,ip2,ip3,ip4,port,used,total,chunks,tdused,tdtotal,tdchunks,errcnt,label_length = struct.unpack(">BBBBBBBBHQQLQQLLL",data[pos:pos + 58])
|
|
label = data[pos+58:pos+58+label_length-1]
|
|
@@ -1233,15 +1233,15 @@
|
|
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if masterversion>=(1,6,5):
|
|
out = []
|
|
@@ -1274,7 +1274,7 @@
|
|
data = myrecv(s,length)
|
|
n = length/8
|
|
servers = []
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*8:(i+1)*8]
|
|
v1,v2,v3,ip1,ip2,ip3,ip4 = struct.unpack(">HBBBBBB",d)
|
|
strip = "%u.%u.%u.%u" % (ip1,ip2,ip3,ip4)
|
|
@@ -1300,15 +1300,15 @@
|
|
i+=1
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "HD" in sectionset:
|
|
out = []
|
|
@@ -1346,7 +1346,7 @@
|
|
data = myrecv(s,length)
|
|
n = length/54
|
|
servers = []
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*54:(i+1)*54]
|
|
disconnected,v1,v2,v3,ip1,ip2,ip3,ip4,port,used,total,chunks,tdused,tdtotal,tdchunks,errcnt = struct.unpack(">BBBBBBBBHQQLQQLL",d)
|
|
if disconnected==0:
|
|
@@ -1355,7 +1355,7 @@
|
|
data = myrecv(s,length)
|
|
n = length/50
|
|
servers = []
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*50:(i+1)*50]
|
|
ip1,ip2,ip3,ip4,port,used,total,chunks,tdused,tdtotal,tdchunks,errcnt = struct.unpack(">BBBBHQQLQQLL",d)
|
|
hostlist.append((1,5,0,ip1,ip2,ip3,ip4,port))
|
|
@@ -1602,15 +1602,15 @@
|
|
i+=1
|
|
out.append("""</table>""")
|
|
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "EX" in sectionset:
|
|
out = []
|
|
@@ -1816,11 +1816,11 @@
|
|
out.append("""</table>""")
|
|
out.append("""<br/>""")
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
try:
|
|
goals = cltoma_list_goals()
|
|
@@ -1839,15 +1839,15 @@
|
|
definition = re.sub(r'([0-9]+)\*([A-Za-z0-9_]+)(,?)', r'\1 × <b>\2</b>\3 ', definition)
|
|
out.append(""" <tr class="C%u"><td>%s</td><td class="LEFT">%s</td><td class="LEFT">%s</td>""" % (row_class, id, name, definition))
|
|
out.append("""</table>""")
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "ML" in sectionset:
|
|
out = []
|
|
@@ -1899,7 +1899,7 @@
|
|
data = myrecv(s,length)
|
|
n = length/136
|
|
servers = []
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*136:(i+1)*136]
|
|
addrdata = d[0:8]
|
|
stats_c = []
|
|
@@ -1915,7 +1915,7 @@
|
|
ver = "unknown"
|
|
else:
|
|
ver = "%d.%d.%d" % (v1,v2,v3)
|
|
- for i in xrange(16):
|
|
+ for i in range(16):
|
|
stats_c.append(struct.unpack(">L",d[i*4+8:i*4+12]))
|
|
stats_l.append(struct.unpack(">L",d[i*4+72:i*4+76]))
|
|
try:
|
|
@@ -1943,25 +1943,25 @@
|
|
out.append(""" <td align="left" rowspan="2">%s</td>""" % host)
|
|
out.append(""" <td align="center" rowspan="2">%s</td>""" % ipnum)
|
|
out.append(""" <td align="center" rowspan="2">%s</td>""" % ver)
|
|
- for st in xrange(16):
|
|
+ for st in range(16):
|
|
out.append(""" <td align="right">%u</td>""" % (stats_c[st]))
|
|
out.append(""" </tr>""")
|
|
out.append(""" <tr class="C%u">""" % (((i-1)%2)*2+2))
|
|
- for st in xrange(16):
|
|
+ for st in range(16):
|
|
out.append(""" <td align="right">%u</td>""" % (stats_l[st]))
|
|
out.append(""" </tr>""")
|
|
i+=1
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "MS" in sectionset:
|
|
out = []
|
|
@@ -2199,15 +2199,15 @@
|
|
i+=1
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "MO" in sectionset:
|
|
out = []
|
|
@@ -2322,27 +2322,27 @@
|
|
out.append(""" <td align="left" rowspan="2">%s</td>""" % host)
|
|
out.append(""" <td align="center" rowspan="2">%s</td>""" % ipnum)
|
|
out.append(""" <td align="left" rowspan="2">%s</td>""" % info)
|
|
- for st in xrange(16):
|
|
+ for st in range(16):
|
|
out.append(""" <td align="right">%u</td>""" % (stats_c[st]))
|
|
out.append(""" <td align="right">%u</td>""" % (sum(stats_c)))
|
|
out.append(""" </tr>""")
|
|
out.append(""" <tr class="C%u">""" % (((i-1)%2)*2+2))
|
|
- for st in xrange(16):
|
|
+ for st in range(16):
|
|
out.append(""" <td align="right">%u</td>""" % (stats_l[st]))
|
|
out.append(""" <td align="right">%u</td>""" % (sum(stats_l)))
|
|
out.append(""" </tr>""")
|
|
i+=1
|
|
out.append("""</table>""")
|
|
s.close()
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "MC" in sectionset:
|
|
out = []
|
|
@@ -2471,7 +2471,7 @@
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
out.append("""<table class="FR" cellspacing="0" summary="Master charts view">""")
|
|
- for i in xrange(2):
|
|
+ for i in range(2):
|
|
out.append(""" <tr>""")
|
|
out.append(""" <td align="center" colspan="4">""")
|
|
out.append(""" <div id="ma_desc%u">%s</div>""" % (i,charts[0][2]))
|
|
@@ -2489,21 +2489,21 @@
|
|
out.append(""" </td>""")
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
if "CC" in sectionset:
|
|
out = []
|
|
|
|
try:
|
|
- if fields.has_key("CCdata"):
|
|
+ if "CCdata" in fields:
|
|
CCdata = fields.getvalue("CCdata")
|
|
else:
|
|
CCdata = ""
|
|
@@ -2521,7 +2521,7 @@
|
|
if cmd==MATOCL_CSERV_LIST and (length%54)==0:
|
|
data = myrecv(s,length)
|
|
n = length/54
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*54:(i+1)*54]
|
|
disconnected,v1,v2,v3,ip1,ip2,ip3,ip4,port,used,total,chunks,tdused,tdtotal,tdchunks,errcnt = struct.unpack(">BBBBBBBBHQQLQQLL",d)
|
|
if disconnected==0:
|
|
@@ -2529,7 +2529,7 @@
|
|
elif cmd==MATOCL_CSERV_LIST and (length%50)==0:
|
|
data = myrecv(s,length)
|
|
n = length/50
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
d = data[i*50:(i+1)*50]
|
|
ip1,ip2,ip3,ip4,port,used,total,chunks,tdused,tdtotal,tdchunks,errcnt = struct.unpack(">BBBBHQQLQQLL",d)
|
|
hostlist.append((ip1,ip2,ip3,ip4,port))
|
|
@@ -2685,7 +2685,7 @@
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
out.append("""<table class="FR" cellspacing="0" summary="Server charts view">""")
|
|
- for i in xrange(2):
|
|
+ for i in range(2):
|
|
out.append(""" <tr>""")
|
|
out.append(""" <td align="center" colspan="4">""")
|
|
out.append(""" <div id="cs_desc%u">%s</div>""" % (i,charts[0][2]))
|
|
@@ -2755,30 +2755,30 @@
|
|
out.append(""" </td>""")
|
|
out.append(""" </tr>""")
|
|
out.append("""</table>""")
|
|
- print "\n".join(out)
|
|
+ print("\n".join(out))
|
|
except Exception:
|
|
- print """<table class="FR" cellspacing="0" summary="Exception">"""
|
|
- print """<tr><td align="left"><pre>"""
|
|
+ print("""<table class="FR" cellspacing="0" summary="Exception">""")
|
|
+ print("""<tr><td align="left"><pre>""")
|
|
traceback.print_exc(file=sys.stdout)
|
|
- print """</pre></td></tr>"""
|
|
- print """</table>"""
|
|
+ print("""</pre></td></tr>""")
|
|
+ print("""</table>""")
|
|
|
|
- print """<br/>"""
|
|
+ print("""<br/>""")
|
|
|
|
def print_file(name):
|
|
f=open(name)
|
|
for line in f:
|
|
- print line
|
|
+ print(line)
|
|
|
|
if "HELP" in sectionset:
|
|
# FIXME(kulek@lizardfs.org) - it should be in separate file help.html however we are waiting for CMAKE to make it happen.
|
|
#print_file("@CGI_PATH@/help.html")
|
|
- print """please contact with help@lizardfs.com"""
|
|
- print """<br/>"""
|
|
+ print("""please contact with help@lizardfs.com""")
|
|
+ print("""<br/>""")
|
|
|
|
|
|
|
|
-print """</div> <!-- end of container -->"""
|
|
+print("""</div> <!-- end of container -->""")
|
|
|
|
-print """</body>"""
|
|
-print """</html>"""
|
|
+print("""</body>""")
|
|
+print("""</html>""")
|