summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2010-11-08 16:25:33 +0100
committerMichal Toman <mtoman@redhat.com>2010-11-08 16:25:33 +0100
commit6bb4e3993687014a5c2fdc2957f274eabc017ca1 (patch)
tree5cc7dcf37ef6cd937c6e7de41a5c26d89208666f
parenta1146cb60d0e2225d2195a6f6b43de0fc52b7b0c (diff)
update worker
-rw-r--r--retrace/lib/retrace.py46
-rwxr-xr-xretrace/worker/abrt-retrace-worker15
-rwxr-xr-xretrace/worker/worker.py7
3 files changed, 43 insertions, 25 deletions
diff --git a/retrace/lib/retrace.py b/retrace/lib/retrace.py
index 656e9086..37409f62 100644
--- a/retrace/lib/retrace.py
+++ b/retrace/lib/retrace.py
@@ -10,13 +10,13 @@ REQUIRED_FILES = ["architecture", "coredump", "packages", "release"]
DF_OUTPUT_PARSER = re.compile("^([^ ^\t]*)[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+%)[ \t]+(.*)$")
XZ_OUTPUT_PARSER = re.compile("^totals[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+\.[0-9]+)[ \t]+([^ ^\t]+)[ \t]+([0-9]+)$")
-URL_PARSER = re.compile("^/([a-zA-Z0-9]+)/")
+URL_PARSER = re.compile("^/([0-9]+)/")
-TASKID_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+TASKPASS_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
CONFIG_FILE = "/etc/abrt/retrace.conf"
CONFIG = {
- "TaskIdLength": 64,
+ "TaskPassLength": 32,
"MaxParallelTasks": 2,
"MaxPackedSize": 30,
"MaxUnpackedSize": 600,
@@ -65,34 +65,46 @@ def unpacked_size(archive):
pipe.close()
return None
+def gen_task_password(taskdir):
+ taskpass = ""
+ for j in xrange(CONFIG["TaskPassLength"]):
+ taskpass += random.choice(TASKPASS_ALPHABET)
+
+ try:
+ passfile = open(taskdir + "/password", "w")
+ passfile.write(taskpass)
+ passfile.close()
+ except:
+ return None
+
+ return taskpass
+
def new_task():
i = 0
newdir = CONFIG["WorkDir"]
while os.path.exists(newdir) and i < 50:
i += 1
- taskid = ""
- for j in xrange(CONFIG["TaskIdLength"]):
- taskid += random.choice(TASKID_ALPHABET)
- newdir = CONFIG["WorkDir"] + "/" + taskid
+ taskid = random.randint(100000000, 999999999)
+ newdir = CONFIG["WorkDir"] + "/" + str(taskid)
- try:
- os.mkdir(newdir)
- return taskid, newdir
- except:
- pass
+ try:
+ os.mkdir(newdir)
+ taskpass = gen_task_password(newdir)
+ if not taskpass:
+ os.system("rm -rf " + newdir)
+ raise
- return None, None
+ return taskid, taskpass, newdir
+ except:
+ return None, None, None
def unpack(archive):
pipe = Popen(["tar", "xJf", archive])
pipe.wait()
return pipe.returncode
-def get_task_password(crashdir):
- return "Password for " + crashdir
-
def get_task_est_time(crashdir):
- return 10
+ return 180
def response(start_response, status, body="", extra_headers=[]):
start_response(status, [("Content-Type", "text/plain"), ("Content-Length", str(len(body)))] + extra_headers)
diff --git a/retrace/worker/abrt-retrace-worker b/retrace/worker/abrt-retrace-worker
index 43d16d38..05a31d5f 100755
--- a/retrace/worker/abrt-retrace-worker
+++ b/retrace/worker/abrt-retrace-worker
@@ -20,16 +20,29 @@ then
export PYTHONPATH="/usr/share/abrt-retrace"
LOG="$1/log"
echo "Starting retrace" > $LOG
- exec /usr/bin/python /usr/share/abrt-retrace/worker.py "$1" >> $LOG
+ /usr/bin/python /usr/share/abrt-retrace/worker.py "$1" >> $LOG
RET=$?
+
if [ $RET -eq "0" ]
then
echo "Retrace successful" >> $LOG
mv "$1/backtrace" "$1/retrace_backtrace"
+ chown "apache" "$1/retrace_backtrace"
else
echo "Retrace failed" >> $LOG
fi
+
mv "$1/log" "$1/retrace_log"
+ chown "apache" "$1/retrace_log"
+
+ for DEL in $1/*
+ do
+ if [ $DEL != "$1/retrace_log" ] && [ $DEL != "$1/retrace_backtrace" ] && [ $DEL != "$1/password" ]
+ then
+ rm -rf $DEL
+ fi
+ done
+
exit $RET
else
echo "Usage: '$0 retrace_directory'"
diff --git a/retrace/worker/worker.py b/retrace/worker/worker.py
index d86b8e0a..8e28ea4b 100755
--- a/retrace/worker/worker.py
+++ b/retrace/worker/worker.py
@@ -213,11 +213,4 @@ if __name__ == "__main__":
retrace_run(15, ["cp", workdir + "/" + chroot + "/root/var/spool/abrt/crash/backtrace", workdir])
print "OK"
- print "Cleaning virtual root and crash directory...",
- sys.stdout.flush()
-
- retrace_run(16, ["mock", "clean", "-r", mockr])
- retrace_run(17, ["rm", "-rf", workdir + "/crash", workdir + "/mock.cfg"])
-
- print "OK"
print "Retrace took " + str(time.time() - starttime) + " seconds"