Esempio n. 1
0
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:
Esempio n. 2
0
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))
Esempio n. 3
0
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)
Esempio n. 4
0
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()