Add active evals (#25)

* Add active evals

* Convert type of stats to date or string

* Fix generic overloads for run

* Lower evaluate timeout

* Add comment for createWriteStream
This commit is contained in:
Kyle Carberry
2019-01-29 18:48:02 -06:00
parent 3a88ae5fb2
commit 20f5d8eeed
13 changed files with 640 additions and 40 deletions

View File

@@ -6,7 +6,7 @@ import { promisify } from "util";
import { TextDecoder } from "text-encoding";
import { logger, field } from "@coder/logger";
import { ClientMessage, WorkingInitMessage, ServerMessage, NewSessionMessage, WriteToSessionMessage } from "../proto";
import { evaluate } from "./evaluate";
import { evaluate, ActiveEvaluation } from "./evaluate";
import { ReadWriteConnection } from "../common/connection";
import { Process, handleNewSession, handleNewConnection, handleNewServer } from "./command";
import * as net from "net";
@@ -23,6 +23,7 @@ export class Server {
private readonly sessions: Map<number, Process> = new Map();
private readonly connections: Map<number, net.Socket> = new Map();
private readonly servers: Map<number, net.Server> = new Map();
private readonly evals: Map<number, ActiveEvaluation> = new Map();
private connectionId: number = Number.MAX_SAFE_INTEGER;
@@ -114,7 +115,18 @@ export class Server {
field("args", evalMessage.getArgsList()),
field("function", evalMessage.getFunction()),
]);
evaluate(this.connection, evalMessage);
const resp = evaluate(this.connection, evalMessage, () => {
this.evals.delete(evalMessage.getId());
});
if (resp) {
this.evals.set(evalMessage.getId(), resp);
}
} else if (message.hasEvalEvent()) {
const e = this.evals.get(message.getEvalEvent()!.getId());
if (!e) {
return;
}
e.onEvent(message.getEvalEvent()!);
} else if (message.hasNewSession()) {
const sessionMessage = message.getNewSession()!;
logger.debug("NewSession", field("id", sessionMessage.getId()));