/
events.ts
94 lines (92 loc) 路 2.69 KB
/
events.ts
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import {ITaskService, ActiveTaskService} from "./service";
import EventEmitter from "events";
import {Logger} from "winston";
/*
TaskEvent describes the union type of all process management related tasks
*/
export type TaskEvent = LaunchTaskEvent | PendingTaskEvent | ConsoleTaskEvent | HealthTaskEvent | ErrorTaskEvent | ExitTaskEvent | TerminateTaskEvent | StopTaskEvent;
/*
* PendingTaskEvent describes a task that has been created, and rendered, but has not been launched.
*/
export interface PendingTaskEvent {
name: "pending";
service: ITaskService;
}
/*
* LaunchTaskEvent describes an event that occurs when a task has been created, and template converted but has not been launched.
*/
export interface LaunchTaskEvent {
name: "launch";
service: ActiveTaskService;
logger: Logger;
}
/*
* ConsoleTaskEvent describes an event that occurs when a task has output on stdout or stderr.
*/
export interface ConsoleTaskEvent {
name: "console";
stdout?: string;
stderr?: string;
logger: Logger;
service: ITaskService;
}
/*
* HealthTaskEvent describes an event that occurs when a healthcheck is required to be prefored.
*/
export interface HealthTaskEvent {
name: "health";
logger: Logger;
service: ActiveTaskService;
}
/**
* ErrorTaskEvent describes an event that occurs when a fatal error has occured with a task that is not related to an exit.
*/
export interface ErrorTaskEvent {
name: "error";
error: Error;
logger: Logger;
service: ITaskService;
}
/**
* StopTaskEvent describes an event that triggers a task to terminate.
*/
export type StopTaskReason = "health" | "unknown";
export interface StopTaskEvent {
name: "stop";
reason: StopTaskReason;
logger: Logger;
service: ActiveTaskService;
}
/**
* TerminateTaskEvent describes an event that occurs when a tasks exits.
*/
export interface TerminateTaskEvent {
name: "terminate";
service: ActiveTaskService;
}
/**
* ExitTaskEvent describes an event that occurs when a tasks exits.
*/
export interface ExitTaskEvent {
name: "exit";
error?: Error;
code: number;
logger: Logger;
service: ActiveTaskService;
}
/**
* EventBus is a message bus for internal notifications related to process management
* The intent is that EventBus is utilized by TaskProcessManager to handle process state transitions
* and is the only source of a process state transition.
*/
export class EventBus {
private static QUEUE_NAME = "INTERNAL_NOTIFICATIONS";
private bus: EventEmitter;
constructor(handler: (event: TaskEvent) => void, bus: EventEmitter = new EventEmitter()) {
this.bus = bus;
this.bus.addListener(EventBus.QUEUE_NAME, handler);
}
public emit(event: TaskEvent) {
this.bus.emit(EventBus.QUEUE_NAME, event);
}
}