From e12304e223b652a8631478c003525d235d98d208 Mon Sep 17 00:00:00 2001 From: Michal Toman Date: Wed, 20 Apr 2011 13:22:16 +0200 Subject: retrace server: add messages into HTTP response --- src/retrace/backtrace.wsgi | 21 ++++++++++++------- src/retrace/create.wsgi | 52 +++++++++++++++++++++++++++++++--------------- src/retrace/log.wsgi | 21 ++++++++++++------- src/retrace/status.wsgi | 18 ++++++++++------ 4 files changed, 75 insertions(+), 37 deletions(-) (limited to 'src/retrace') diff --git a/src/retrace/backtrace.wsgi b/src/retrace/backtrace.wsgi index 2074d157..92c4d040 100644 --- a/src/retrace/backtrace.wsgi +++ b/src/retrace/backtrace.wsgi @@ -7,12 +7,14 @@ def application(environ, start_response): match = URL_PARSER.match(request.script_name) if not match: - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "Invalid URL") taskdir = "%s/%s" % (CONFIG["SaveDir"], match.group(1)) if not os.path.isdir(taskdir): - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "There is no such task") pwdpath = "%s/password" % taskdir try: @@ -20,20 +22,25 @@ def application(environ, start_response): pwd = pwdfile.read() pwdfile.close() except: - return response(start_response, "500 Internal Server Error", "Unable to verify password") + return response(start_response, "500 Internal Server Error", + "Unable to verify password") - if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: - return response(start_response, "403 Forbidden") + if not "X-Task-Password" in request.headers or \ + request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden", + "Invalid password") btpath = "%s/retrace_backtrace" % taskdir if not os.path.isfile(btpath): - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "There is no backtrace for the specified task") try: btfile = open(btpath, "r") output = btfile.read() btfile.close() except: - return response(start_response, "500 Internal Server Error", "Unable to read backtrace file at server") + return response(start_response, "500 Internal Server Error", + "Unable to read backtrace file") return response(start_response, "200 OK", output) diff --git a/src/retrace/create.wsgi b/src/retrace/create.wsgi index 8593ed80..e26ae0cc 100644 --- a/src/retrace/create.wsgi +++ b/src/retrace/create.wsgi @@ -7,22 +7,28 @@ def application(environ, start_response): request = Request(environ) if request.scheme != "https": - return response(start_response, "403 Forbidden", "You must use HTTPS.") + return response(start_response, "403 Forbidden", + "You must use HTTPS") if len(get_active_tasks()) >= CONFIG["MaxParallelTasks"]: - return response(start_response, "503 Service Unavailable") + return response(start_response, "503 Service Unavailable", + "Retrace server is fully loaded at the moment") if request.method != "POST": - return response(start_response, "405 Method Not Allowed") + return response(start_response, "405 Method Not Allowed", + "You must use POST method") if not request.content_type in HANDLE_ARCHIVE.keys(): - return response(start_response, "415 Unsupported Media Type") + return response(start_response, "415 Unsupported Media Type", + "Specified archive format is not supported") if not request.content_length: - return response(start_response, "411 Length Required") + return response(start_response, "411 Length Required", + "You need to set Content-Length header properly") if request.content_length > CONFIG["MaxPackedSize"] * 1048576: - return response(start_response, "413 Request Entity Too Large") + return response(start_response, "413 Request Entity Too Large", + "Specified archive is too large") if CONFIG["UseWorkDir"]: workdir = CONFIG["WorkDir"] @@ -33,39 +39,47 @@ def application(environ, start_response): try: os.makedirs(workdir) except: - return response(start_response, "500 Internal Server Error", "Unable to create working directory") + return response(start_response, "500 Internal Server Error", + "Unable to create working directory") space = free_space(workdir) if not space: - return response(start_response, "500 Internal Server Error", "Unable to obtain disk free space") + return response(start_response, "500 Internal Server Error", + "Unable to obtain disk free space") if space - request.content_length < CONFIG["MinStorageLeft"] * 1048576: - return response(start_response, "507 Insufficient Storage") + return response(start_response, "507 Insufficient Storage", + "There is not enough storage space on the server") try: archive = NamedTemporaryFile(mode="wb", delete=False, suffix=".tar.xz") archive.write(request.body) archive.close() except: - return response(start_response, "500 Internal Server Error", "Unable to save archive") + return response(start_response, "500 Internal Server Error", + "Unable to save archive") size = unpacked_size(archive.name, request.content_type) if not size: os.unlink(archive.name) - return response(start_response, "500 Internal Server Error", "Unable to obtain unpacked size") + return response(start_response, "500 Internal Server Error", + "Unable to obtain unpacked size") if size > CONFIG["MaxUnpackedSize"] * 1048576: os.unlink(archive.name) - return response(start_response, "413 Request Entity Too Large") + return response(start_response, "413 Request Entity Too Large", + "Specified archive's content is too large") if space - size < CONFIG["MinStorageLeft"] * 1048576: os.unlink(archive.name) - return response(start_response, "507 Insufficient Storage") + return response(start_response, "507 Insufficient Storage", + "There is not enough storage space on the server") taskid, taskpass, taskdir = new_task() if not taskid or not taskpass or not taskdir: - return response(start_response, "500 Internal Server Error", "Unable to create new task") + return response(start_response, "500 Internal Server Error", + "Unable to create new task") try: os.mkdir("%s/crash/" % taskdir) @@ -78,7 +92,8 @@ def application(environ, start_response): except: os.chdir("/") Popen(["rm", "-rf", taskdir]) - return response(start_response, "500 Internal Server Error", "Unable to unpack archive") + return response(start_response, "500 Internal Server Error", + "Unable to unpack archive") files = os.listdir(".") @@ -86,8 +101,11 @@ def application(environ, start_response): if not required_file in files: os.chdir("/") Popen(["rm", "-rf", taskdir]) - return response(start_response, "403 Forbidden", "Required file \"{0}\" is missing".format(required_file)) + return response(start_response, "403 Forbidden", + "Required file \"%s\" is missing" % required_file) Popen(["/usr/bin/abrt-retrace-worker", "%d" % taskid]) - return response(start_response, "201 Created", "", [("X-Task-Id", "%d" % taskid), ("X-Task-Password", taskpass)]) + return response(start_response, "201 Created", "", + [("X-Task-Id", "%d" % taskid), + ("X-Task-Password", taskpass)]) diff --git a/src/retrace/log.wsgi b/src/retrace/log.wsgi index ab9b31a3..5bdc4ffb 100644 --- a/src/retrace/log.wsgi +++ b/src/retrace/log.wsgi @@ -7,12 +7,14 @@ def application(environ, start_response): match = URL_PARSER.match(request.script_name) if not match: - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "Invalid URL") taskdir = "%s/%s" % (CONFIG["SaveDir"], match.group(1)) if not os.path.isdir(taskdir): - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "There is no such task") pwdpath = "%s/password" % taskdir try: @@ -20,20 +22,25 @@ def application(environ, start_response): pwd = pwdfile.read() pwdfile.close() except: - return response(start_response, "500 Internal Server Error", "Unable to verify password") + return response(start_response, "500 Internal Server Error", + "Unable to verify password") - if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: - return response(start_response, "403 Forbidden") + if not "X-Task-Password" in request.headers or \ + request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden", + "Invalid password") logpath = "%s/retrace_log" % taskdir if not os.path.isfile(logpath): - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "There is no log for the specified task") try: logfile = open(logpath, "r") output = logfile.read() logfile.close() except: - return response(start_response, "500 Internal Server Error", "Unable to read log file at server") + return response(start_response, "500 Internal Server Error", + "Unable to read log file") return response(start_response, "200 OK", output) diff --git a/src/retrace/status.wsgi b/src/retrace/status.wsgi index 1e5bdf66..50334772 100644 --- a/src/retrace/status.wsgi +++ b/src/retrace/status.wsgi @@ -7,12 +7,14 @@ def application(environ, start_response): match = URL_PARSER.match(request.script_name) if not match: - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "Invalid URL") taskdir = "%s/%s" % (CONFIG["SaveDir"], match.group(1)) if not os.path.isdir(taskdir): - return response(start_response, "404 Not Found") + return response(start_response, "404 Not Found", + "There is no such task") pwdpath = "%s/password" % taskdir try: @@ -20,10 +22,13 @@ def application(environ, start_response): pwd = pwdfile.read() pwdfile.close() except: - return response(start_response, "500 Internal Server Error", "Unable to verify password") + return response(start_response, "500 Internal Server Error", + "Unable to verify password") - if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: - return response(start_response, "403 Forbidden") + if not "X-Task-Password" in request.headers or \ + request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden", + "Invalid password") status = "PENDING" if os.path.isfile("%s/retrace_log" % taskdir): @@ -40,4 +45,5 @@ def application(environ, start_response): except: pass - return response(start_response, "200 OK", statusmsg, [("X-Task-Status", status)]) + return response(start_response, "200 OK", + statusmsg, [("X-Task-Status", status)]) -- cgit