コード例 #1
0
ファイル: views.py プロジェクト: yuede/klee-web
    def submit(self, request):
        worker_config = WorkerConfig()

        code = request.data.get("code")
        email = request.data.get("email")
        args = request.data.get("run_configuration", {})

        task = submit_code.apply_async(
            [code,
             email,
             args,
             request.build_absolute_uri(reverse('jobs_notify'))],
            soft_time_limit=worker_config.timeout
        )

        Task.objects.create(task_id=task.task_id,
                            email_address=email,
                            ip_address=get_client_ip(request),
                            created_at=datetime.datetime.now())

        return Response({'task_id': task.task_id})
コード例 #2
0
 def setUp(self):
     self.worker_config = WorkerConfig()
     self.worker_config.r = fakeredis.FakeStrictRedis()
コード例 #3
0
class TestWorkerConfig(unittest.TestCase):
    def setUp(self):
        self.worker_config = WorkerConfig()
        self.worker_config.r = fakeredis.FakeStrictRedis()

    def test_redis_set(self):
        key, value = "key_set", "5"
        self.worker_config.set_config(key, value)
        self.assertEqual(int(value), self.worker_config.get_config(key))

    def test_redis_get_nonexistent_key(self):
        self.assertEqual(None, self.worker_config.get_config("invalid_key"))

    def test_redis_correct_casting(self):
        key, value = "key_casting", 5
        self.worker_config.set_config(key, value)
        self.assertEqual(value, self.worker_config.get_config(key))

    def test_redis_doesnt_cast_strings(self):
        key, value = "key_string_casting", b"value"
        self.worker_config.set_config(key, value)
        self.assertEqual(value, self.worker_config.get_config(key))

    def test_timeout_cpu_and_memory_defaults(self):
        timeout_val_defualt = 600
        cpu_share_default = 100
        memory_limit_default = 1024

        self.assertEqual(timeout_val_defualt, self.worker_config.timeout)
        self.assertEqual(cpu_share_default, self.worker_config.cpu_share)
        self.assertEqual(memory_limit_default, self.worker_config.memory_limit)

    def test_timeout_cpu_and_memory_properties(self):
        timeout, timeout_val = "timeout", "10"
        cpu_share, cpu_share_val = "cpu_share", "20"
        memory_limit, memory_limit_val = "memory_limit", "30"

        self.worker_config.set_config(timeout, timeout_val)
        self.worker_config.set_config(cpu_share, cpu_share_val)
        self.worker_config.set_config(memory_limit, memory_limit_val)

        self.assertEqual(int(timeout_val), self.worker_config.timeout)
        self.assertEqual(int(cpu_share_val), self.worker_config.cpu_share)
        self.assertEqual(int(memory_limit_val),
                         self.worker_config.memory_limit)
コード例 #4
0
ファイル: runner.py プロジェクト: ccadar/klee-web
from worker.worker_config import WorkerConfig

from worker.mailer.mailgun_mailer import MailgunMailer
from worker.mailer.dummy_mailer import DummyMailer

from worker.processor.failed_test import FailedTestProcessor
from worker.processor.coverage import CoverageProcessor
from worker.processor.upload import UploadProcessor
from worker.processor.klee_run import KleeRunProcessor
from worker.processor.stats import StatsProcessor

ANSI_ESCAPE_PATTERN = re.compile(r'\x1b[^m]*m')
LXC_MESSAGE_PATTERN = re.compile(r'lxc-start: .*')
DEVELOPMENT = True if os.environ['DEVELOPMENT'] == "1" else False

worker_config = WorkerConfig()


class WorkerRunner():
    CODE_FILE_NAME = 'code.c'
    OBJECT_FILE_NAME = 'code.o'
    DOCKER_MOUNT_DIR = '/tmp/code'
    DOCKER_CODE_FILE = os.path.join(DOCKER_MOUNT_DIR, CODE_FILE_NAME)
    DOCKER_OBJECT_FILE = os.path.join(DOCKER_MOUNT_DIR, OBJECT_FILE_NAME)
    DEFAULT_PROCESSOR_PIPELINE = [
        KleeRunProcessor, UploadProcessor, FailedTestProcessor, StatsProcessor,
        CoverageProcessor
    ]

    def __init__(self,
                 task_id,
コード例 #5
0
 def setUp(self):
     self.worker_config = WorkerConfig()
     self.worker_config.r = fakeredis.FakeStrictRedis()
コード例 #6
0
class TestWorkerConfig(unittest.TestCase):
    def setUp(self):
        self.worker_config = WorkerConfig()
        self.worker_config.r = fakeredis.FakeStrictRedis()

    def test_redis_set(self):
        key, value = "key_set", "5"
        self.worker_config.set_config(key, value)
        self.assertEqual(int(value), self.worker_config.get_config(key))

    def test_redis_get_nonexistent_key(self):
        self.assertEqual(None, self.worker_config.get_config("invalid_key"))

    def test_redis_correct_casting(self):
        key, value = "key_casting", 5
        self.worker_config.set_config(key, value)
        self.assertEqual(value, self.worker_config.get_config(key))

    def test_redis_doesnt_cast_strings(self):
        key, value = "key_string_casting", "value"
        self.worker_config.set_config(key, value)
        self.assertEqual(value, self.worker_config.get_config(key))

    def test_timeout_cpu_and_memory_defaults(self):
        timeout_val_defualt = 30
        cpu_share_default = 100
        memory_limit_default = 1024

        self.assertEqual(timeout_val_defualt, self.worker_config.timeout)
        self.assertEqual(cpu_share_default, self.worker_config.cpu_share)
        self.assertEqual(memory_limit_default, self.worker_config.memory_limit)

    def test_timeout_cpu_and_memory_properties(self):
        timeout, timeout_val = "timeout", "10"
        cpu_share, cpu_share_val = "cpu_share", "20"
        memory_limit, memory_limit_val = "memory_limit", "30"

        self.worker_config.set_config(timeout, timeout_val)
        self.worker_config.set_config(cpu_share, cpu_share_val)
        self.worker_config.set_config(memory_limit, memory_limit_val)

        self.assertEqual(int(timeout_val), self.worker_config.timeout)
        self.assertEqual(int(cpu_share_val), self.worker_config.cpu_share)
        self.assertEqual(int(memory_limit_val),
                         self.worker_config.memory_limit)
コード例 #7
0
ファイル: views.py プロジェクト: ccadar/klee-web
from django.shortcuts import render

from .decorators import group_required
from .forms import AdminConfigForm
from worker.worker import celery
from worker.worker_config import WorkerConfig
from . import usage_stats
from . import klee_tasks

HUMAN_READABLE_FIELD_NAMES = {
    "timeout": "Timeout",
    "cpu_share": "CPU Share",
    "memory_limit": "Memory Limit"
}

worker_configuration = WorkerConfig()


@group_required("admin")
def index(request):
    attrs = {
        'total_done': len(klee_tasks.done_tasks()),
        'avg_time': usage_stats.avg_job_duration(),
        'jobs_per_day': usage_stats.avg_jobs_per_day(),
        'today': datetime.datetime.now().strftime("%a %d/%m/%Y %H:%M")
    }
    return render(request, "control_panel/index.html", attrs)


@group_required("admin")
def get_job_history(request):