-
Notifications
You must be signed in to change notification settings - Fork 0
/
jagr.conf
70 lines (70 loc) · 3.31 KB
/
jagr.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# The locations of the following directories may be configured here
dir {
# Grader jar ingest directory
graders=graders
# Runtime dependencies for submissions
libs=libs
# Rubrics export directory
rubrics=rubrics
# Submissions ingest directory
submissions=submissions
# Submission export directory
submissions-export=submissions-export
}
executor {
#
# The maximum amount of concurrency to use for grading.
# For a given concurrency n, Jagr will ensure that a maximum of n threads or processes are used concurrently that actively run
# submission code.
concurrency=4
#
# The JVM arguments to use for grading. These arguments are passed to the JVM that runs the grading code.
# This only applies to the "process" mode, as the "thread" and "single" modes do not spawn a new JVM.
#
jvm-args=[]
#
# The executor mode to use. The following options are available:
# - "single" ::
# Runs every TestCycle consecutively in the main thread. This mode does not create any extra processes or threads for grading.
#
# - "thread" ::
# Creates a separate thread for every TestCycle. This mode greatly speeds up the grading process, especially with a large
# amount of submissions. The overhead of creating, managing and synchronizing threads is minimal compared to the performance
# benefits. However, this mode has the danger of creating "unkillable" threads (e.g. from certain kinds of infinite loops)
# which dramatically slow down the grading process through resource starvation of the host machine.
#
# The maximum number of concurrent threads used for grading is defined by the option "concurrency".
#
# - "process" ::
# Creates a separate process for every TestCycle. This mode has the most overhead, but is also the most defensive against
# "badly behaving" code. A certain amount of sandboxing can be achieved in this mode, which is not possible in the other modes
# such as "thread" or "single".
#
# The maximum number of concurrent child process used for grading is defined by the option "concurrency".
mode=process
#
# The grading thread's maximum permitted elapsed userTime in milliseconds since the last timeout before an
# AssertionFailedError is thrown. If a thread's userTime satisfies
# (userTime - lastTimeout) > individualTimeout,
# the current userTime is stored for comparison later, and an AssertionFailedError is thrown to be caught by JUnit.
timeout-individual=10000
#
# The grading thread's maximum permitted elapsed userTime in milliseconds (from thread start) before an
# AssertionFailedError is thrown. If a thread's userTime satisfies
# ((userTime - lastTimeout) > individualTimeout) && (userTime > totalTimeout),
# an AssertionFailedError is thrown to be caught by JUnit. Note that lastTimeout is not reset in this case, and all further
# invocations of checkTimeout() will result in an AssertionFailedError
timeout-total=150000
}
extras {
moodle-unpack {
assignment-id-regex=".*Abgabe[^0-9]*(?<assignmentId>[0-9]{1,2}).*[.]zip"
enabled=true
student-regex=".* - (?<studentId>([a-z]{2}[0-9]{2}[a-z]{4})|([a-z]+_[a-z]+))/submissions/.*[.]jar"
}
}
transformers {
timeout {
enabled=true
}
}