while True: # check for dead processes dead = set() for i in range(len(running)): id_, row, p = running[i] if not p.is_alive(): if p.exitcode < 0: # this probably only happens if we killed it # update the database row['score'] = 0.0 row['score_box'] = '' row['response'] = ("<font color='red'><b>Your submission could not be checked " "because the checker ran for too long.</b></font>") magic = row['magic'] newloc = os.path.join(RESULTS, magic[0], magic[1], magic) with open(newloc, 'w') as f: f.write(cslog.prep(row)) # then remove from running os.unlink(os.path.join(RUNNING, row['magic'])) dead.add(i) elif time.time() - p._started > REAL_TIMEOUT: try: os.killpg(os.getpgid(p.pid), signal.SIGKILL) except: pass for i in sorted(dead, reverse=True): running.pop(i) if base_context.cs_checker_parallel_checks - len(running) > 0: # otherwise, add an entry to running. waiting = sorted(os.listdir(QUEUED)) if waiting:
import os import sys import zlib import pickle import shutil this_dir = os.path.dirname(__file__) catsoop_root = os.path.abspath(os.path.join(this_dir, "..", "..", "..")) sys.path.append(catsoop_root) import catsoop.cslog as cslog import catsoop.base_context as bc results = os.path.join(bc.cs_data_root, "_logs", "_checker") for root, dirs, files in os.walk(results): dirs.sort() for fname in files: fn = os.path.join(root, fname) try: with open(fn, "r") as f: infile = f.read().strip() x = eval(infile) except: continue t = cslog.prep(x) with open(fn, "wb") as f: f.write(t) print(fn, len(infile), len(t))
import os import sys import zlib import pickle import shutil this_dir = os.path.dirname(__file__) catsoop_root = os.path.abspath(os.path.join(this_dir, "..", "..", "..")) sys.path.append(catsoop_root) import catsoop.cslog as cslog import catsoop.base_context as bc results = os.path.join(bc.cs_data_root, "_logs", "_checker", "results") for root, dirs, files in os.walk(results): dirs.sort() for fname in files: fn = os.path.join(root, fname) try: with open(fn, "rb") as f: x = pickle.loads(zlib.decompress(f.read())) except: continue with open(fn, "w") as f: f.write(cslog.prep(x)) print(fn)
s = sqlite3.connect(os.path.join(logroot, '_checker.db')) c = s.cursor() c.execute('SELECT * FROM checker') r = c.fetchone() while r is not None: magic = r[0] print(magic) entry = { 'path': json.loads(r[1]), 'username': r[2], 'names': json.loads(r[3]), 'form': json.loads(r[4]), 'time': r[5], 'action': r[7], } progress = r[6] if progress in (2, 3): # this means finished. need to get score, etc, as well entry['response'] = zlib.decompress(r[10]) entry['score'] = r[8] entry['score_box'] = r[9] with open(os.path.join(RESULTS, magic), 'wb') as f: f.write(cslog.prep(entry)) elif progress == 1: with open(os.path.join(RUNNING, magic), 'wb') as f: f.write(cslog.prep(entry)) elif progress == 2: with open(os.path.join(QUEUED, '0_%s' % magic), 'wb') as f: f.write(cslog.prep(entry)) r = c.fetchone()