Skip to content

Commit 80cc5a4

Browse files
committed
fix types
1 parent ef52e51 commit 80cc5a4

File tree

4 files changed

+20
-21
lines changed

4 files changed

+20
-21
lines changed

config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
exports = module.exports = {
2+
MAX_OUTPUT_BUFFER: 65536,
23
AMQP: {
34
USER: process.env.AMQP_USER || 'codingblocks',
45
PASS: process.env.AMQP_PASS || 'codingblocks',

src/taskmaster.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ const nr = require('newrelic');
22
import * as Raven from 'raven'
33
import * as amqp from 'amqplib/callback_api'
44
import {Connection} from 'amqplib/callback_api'
5-
import {RunJob, RunResult, SubmissionResult} from './types/job'
6-
import { executor } from './tasks'
5+
import { runExecutor, submissionExecutor } from './tasks'
76
import config = require('../config.js')
87

98
// =============== Setup Raven
@@ -26,17 +25,16 @@ amqp.connect(`amqp://${config.AMQP.USER}:${config.AMQP.PASS}@${config.AMQP.HOST}
2625
channel.assertQueue(jobQ);
2726
channel.consume(jobQ, async (msg) => {
2827
try {
29-
const job: RunJob = JSON.parse(msg.content.toString())
30-
const jobResult: RunResult|SubmissionResult = await executor(job)
28+
const job = JSON.parse(msg.content.toString())
29+
let jobResult
30+
if (job.testcases) {
31+
jobResult = await submissionExecutor(job)
32+
} else {
33+
jobResult = await runExecutor(job)
34+
}
3135

3236
// TODO
33-
channel.sendToQueue(successQ, (new Buffer(JSON.stringify(<RunResult>{
34-
id: job.id,
35-
stderr: jobResult.stderr,
36-
stdout: jobResult.stdout,
37-
time: jobResult.time,
38-
code: jobResult.code
39-
}))))
37+
channel.sendToQueue(successQ, (new Buffer(JSON.stringify(jobResult))))
4038
channel.ack(msg)
4139
} catch (err) {
4240
Raven.captureException(err);

src/tasks/index.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import { RunJob, SubmissionJob, RunResult, SubmissionResult } from "types/job";
1+
import { RunJob, SubmissionJob, RunResult, SubmissionResult, Job, Result } from "types/job";
22
import config = require('../../config.js')
33
import {exec, mkdir, rm} from 'shelljs'
44
import * as path from 'path'
55

66
import RunScenario from './run'
77
import SubmissionScenario from './submission'
8+
import { Scenario } from "types/scenario";
89

9-
export const executor = async (job: RunJob|SubmissionJob): Promise<RunResult|SubmissionResult> => {
10+
export const executor = <J, R>(scenario: Scenario) => async (job: Job & J): Promise<Result & R> => {
1011
// Create RUNBOX
1112
rm('-rf', config.RUNBOX.DIR)
1213
mkdir('-p', config.RUNBOX.DIR)
1314
const currentJobDir = path.join(config.RUNBOX.DIR, job.id.toString())
1415
mkdir('-p', currentJobDir)
1516

1617
const LANG_CONFIG = config.LANGS[job.lang]
17-
const scenario = job.hasOwnProperty('testcases') ? SubmissionScenario : RunScenario
1818

1919
// Setup RUNBOX
20-
await scenario.setup(currentJobDir, <RunJob&SubmissionJob>job) // TODO:
20+
await scenario.setup(currentJobDir, job) // TODO:
2121

2222
// Run worker
2323
exec(`docker run \\
@@ -33,9 +33,12 @@ export const executor = async (job: RunJob|SubmissionJob): Promise<RunResult|Sub
3333
`)
3434

3535
// Get result
36-
const result = await scenario.result(currentJobDir, job.id)
36+
const result = <Result & R>(await scenario.result(currentJobDir, job.id))
3737

3838
rm('-rf', currentJobDir)
3939

4040
return result
4141
}
42+
43+
export const runExecutor = executor<RunJob, RunResult>(RunScenario)
44+
export const submissionExecutor = executor<SubmissionJob, SubmissionResult>(SubmissionScenario)

src/tasks/run.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ import {cat, exec, mkdir, rm, touch, head} from 'shelljs'
33
import {RunJob, RunResult} from '../types/job'
44
import * as path from 'path'
55
import * as fs from 'fs'
6-
import { Scenario } from 'types/scenario.js'
7-
8-
rm('-rf', config.RUNBOX.DIR)
9-
mkdir('-p', config.RUNBOX.DIR)
6+
import { Scenario } from 'types/scenario'
107

118
class RunScenario implements Scenario {
129
setup(currentJobDir: string, job: RunJob) {
@@ -20,7 +17,7 @@ class RunScenario implements Scenario {
2017

2118
async result(currentJobDir: string, jobId: number): Promise<RunResult> {
2219
const stdout = exec(`
23-
head -c 65536 ${path.join(currentJobDir, 'run.stdout')}
20+
head -c ${config.MAX_OUTPUT_BUFFER} ${path.join(currentJobDir, 'run.stdout')}
2421
`)
2522

2623
// Check for compile_stderr if can't find a stdout file ; stdout can be ''

0 commit comments

Comments
 (0)