summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2010-11-08 16:21:51 +0100
committerKarel Klic <kklic@redhat.com>2010-12-02 16:13:42 +0100
commit6f601ef4b1e0a3dd4050bd03167b86a84df6979e (patch)
tree8a593ec08128521cc6297140895d1f6d4150f1c1
parent4726c5a6e1177d79946a90dd0a8993d9b98d8570 (diff)
update interface
-rw-r--r--retrace/interface/backtrace.wsgi29
-rw-r--r--retrace/interface/create.wsgi13
-rw-r--r--retrace/interface/log.wsgi29
-rw-r--r--retrace/interface/status.wsgi28
4 files changed, 81 insertions, 18 deletions
diff --git a/retrace/interface/backtrace.wsgi b/retrace/interface/backtrace.wsgi
index 1f059d11..6e2b9592 100644
--- a/retrace/interface/backtrace.wsgi
+++ b/retrace/interface/backtrace.wsgi
@@ -14,9 +14,30 @@ def application(environ, start_response):
if not match:
return response(start_response, "404 Not Found")
- task = match.group(1)
+ taskdir = CONFIG["WorkDir"] + "/" + match.group(1)
- btpath = CONFIG["WorkDir"] + "/" + task + "/backtrace"
+ if not os.path.isdir(taskdir):
+ return response(start_response, "404 Not Found")
+
+ pwdpath = taskdir + "/password"
+ try:
+ if not os.path.isfile(pwdpath):
+ raise
+
+ pwdfile = open(pwdpath, "r")
+ pwd = pwdfile.read()
+ pwdfile.close()
+ except:
+ 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")
+
+ newpass = gen_task_password(taskdir)
+ if not newpass:
+ return response(start_response, "500 Internal Server Error", "Unable to generate new password")
+
+ btpath = taskdir + "/retrace_backtrace"
if not os.path.isfile(btpath):
return response(start_response, "404 Not Found")
@@ -25,6 +46,6 @@ def application(environ, start_response):
output = btfile.read()
btfile.close()
except:
- 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 at server")
- return response(start_response, "200 OK", output) \ No newline at end of file
+ return response(start_response, "200 OK", output, [("X-Task-Password", newpass)])
diff --git a/retrace/interface/create.wsgi b/retrace/interface/create.wsgi
index a7156c89..f5c243d7 100644
--- a/retrace/interface/create.wsgi
+++ b/retrace/interface/create.wsgi
@@ -16,7 +16,7 @@ def application(environ, start_response):
if request.method != "POST":
return response(start_response, "405 Method Not Allowed")
- if not request.content_type in ["application/x-xz", "application/x-xz-compressed-tar"]:
+ if not request.content_type in ["application/x-xz", "application/x-xz-compressed-tar", "application/x-gzip", "application/x-tar"]:
return response(start_response, "415 Unsupported Media Type")
if not request.content_length:
@@ -52,12 +52,13 @@ def application(environ, start_response):
os.unlink(archive.name)
return response(start_response, "507 Insufficient Storage")
- taskid, taskdir = new_task()
- if not taskid or not taskdir:
+ 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")
try:
- os.chdir(taskdir)
+ os.mkdir(taskdir + "/crash/")
+ os.chdir(taskdir + "/crash/")
unpack_retcode = unpack(archive.name)
os.unlink(archive.name)
@@ -76,4 +77,6 @@ def application(environ, start_response):
os.system("rm -rf " + taskdir)
return response(start_response, "403 Forbidden")
- return response(start_response, "201 Created", "", [("X-Task-Id", taskid), ("X-Task-Est-Time", str(get_task_est_time(taskdir)))]) \ No newline at end of file
+ # ToDo Spawn worker
+
+ return response(start_response, "201 Created", "", [("X-Task-Id", str(taskid)), ("X-Task-Password", taskpass), ("X-Task-Est-Time", str(get_task_est_time(taskdir)))])
diff --git a/retrace/interface/log.wsgi b/retrace/interface/log.wsgi
index c8b0b330..f4778767 100644
--- a/retrace/interface/log.wsgi
+++ b/retrace/interface/log.wsgi
@@ -14,9 +14,30 @@ def application(environ, start_response):
if not match:
return response(start_response, "404 Not Found")
- task = match.group(1)
+ taskdir = CONFIG["WorkDir"] + "/" + match.group(1)
- logpath = CONFIG["WorkDir"] + "/" + task + "/log"
+ if not os.path.isdir(taskdir):
+ return response(start_response, "404 Not Found")
+
+ pwdpath = taskdir + "/password"
+ try:
+ if not os.path.isfile(pwdpath):
+ raise
+
+ pwdfile = open(pwdpath, "r")
+ pwd = pwdfile.read()
+ pwdfile.close()
+ except:
+ 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")
+
+ newpass = gen_task_password(taskdir)
+ if not newpass:
+ return response(start_response, "500 Internal Server Error", "Unable to generate new password")
+
+ logpath = taskdir + "/retrace_log"
if not os.path.isfile(logpath):
return response(start_response, "404 Not Found")
@@ -25,6 +46,6 @@ def application(environ, start_response):
output = logfile.read()
logfile.close()
except:
- 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 at server")
- return response(start_response, "200 OK", output) \ No newline at end of file
+ return response(start_response, "200 OK", output)
diff --git a/retrace/interface/status.wsgi b/retrace/interface/status.wsgi
index c4c62f7b..1341d594 100644
--- a/retrace/interface/status.wsgi
+++ b/retrace/interface/status.wsgi
@@ -14,16 +14,34 @@ def application(environ, start_response):
if not match:
return response(start_response, "404 Not Found")
- task = match.group(1)
+ taskdir = CONFIG["WorkDir"] + "/" + match.group(1)
- if not os.path.isdir(CONFIG["WorkDir"] + "/" + task):
+ if not os.path.isdir(taskdir):
return response(start_response, "404 Not Found")
+ pwdpath = taskdir + "/password"
+ try:
+ if not os.path.isfile(pwdpath):
+ raise
+
+ pwdfile = open(pwdpath, "r")
+ pwd = pwdfile.read()
+ pwdfile.close()
+ except:
+ 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")
+
+ newpass = gen_task_password(taskdir)
+ if not newpass:
+ return response(start_response, "500 Internal Server Error", "Unable to generate new password")
+
status = "PENDING"
- if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/log"):
- if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/backtrace"):
+ if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/retrace_log"):
+ if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/retrace_backtrace"):
status = "FINISHED_SUCCESS"
else:
status = "FINISHED_FAILURE"
- return response(start_response, "200 OK", "", [("X-Task-Status", status)]) \ No newline at end of file
+ return response(start_response, "200 OK", status, [("X-Task-Status", status)])