Skip to content

Commit 90b2c1f

Browse files
authored
Merge pull request #24 from csivitu/dev
merge dev
2 parents 1f721a6 + 741d1b1 commit 90b2c1f

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

examples/worker.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { Worker, languages } from '../src/CodeExecutor';
22
import logger from '../src/utils/logger';
33

44
/**
5-
* name, redis, folderPath, default folderPath is /tmp/code-exec
6-
* (folderPath will be mounted in container,
7-
* the code and testcases will be saved here)
5+
* name, redis, folderPath ( path to mount, default /tmp/code-exec ),
6+
* memory (in MB, default 0, ie no limit),
7+
* CPUs (no. of CPUs, default 0.5)
88
*/
99
const worker = new Worker('myExecutor', 'redis://127.0.0.1:6379');
1010

src/Runner.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ interface RunnerOpts {
2222
folderPath: string;
2323
language: string;
2424
timeout: number;
25+
memory: number;
26+
CPUs: number;
2527
}
2628
export default class Runner {
2729
private docker: Docker;
@@ -39,12 +41,18 @@ export default class Runner {
3941
folderPath,
4042
language,
4143
timeout,
44+
memory,
45+
CPUs,
4246
}: RunnerOpts): Promise < Result > {
4347
const Paths = await saveCode(folderPath, code, testCases, base64, language);
4448
const promisesToKeep: Array<Promise<Array<object>>> = [];
4549
for (let i = 0; i < Paths.length; i += 1) {
4650
promisesToKeep.push(this.docker.run(tag, ['bash', '/start.sh', `${i}`, `${timeout}`], null, {
4751
HostConfig: {
52+
CpuPeriod: 100000,
53+
CpuQuota: CPUs * 100000,
54+
Memory: memory,
55+
NetworkMode: 'none',
4856
AutoRemove: true,
4957
Mounts: [{
5058
Source: Paths[i],

src/Worker.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@ export default class Worker {
1818

1919
private folderPath?: string;
2020

21-
constructor(name: string, redis: string, folderPath?: string) {
21+
private memory?: number;
22+
23+
private CPUs?: number;
24+
25+
constructor(name: string, redis: string, folderPath?: string, memory?: number, CPUs?: number) {
2226
this.docker = new Docker();
2327
this.runner = new Runner(this.docker);
2428
this.builder = new Builder(this.docker);
2529
this.queue = new Bull(name, redis);
2630
this.folderPath = folderPath || '/tmp/code-exec';
31+
this.memory = (memory || 0) * 1000000;
32+
this.CPUs = CPUs || 0.5;
2733
}
2834

2935
private async work(codeOptions: Code): Promise<Result> {
@@ -38,6 +44,8 @@ export default class Worker {
3844
base64: codeOptions.base64 || false,
3945
language: codeOptions.language,
4046
timeout: codeOptions.timeout,
47+
memory: this.memory,
48+
CPUs: this.CPUs,
4149
});
4250

4351
return result;

0 commit comments

Comments
 (0)