mirror of
https://github.com/fccview/cronmaster.git
synced 2026-01-06 04:48:51 -05:00
87 lines
1.6 KiB
TypeScript
87 lines
1.6 KiB
TypeScript
|
|
export type SSEEventType =
|
|
| "job-started"
|
|
| "job-completed"
|
|
| "job-failed"
|
|
| "log-line"
|
|
| "system-stats"
|
|
| "heartbeat";
|
|
|
|
export interface BaseSSEEvent {
|
|
type: SSEEventType;
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface JobStartedEvent extends BaseSSEEvent {
|
|
type: "job-started";
|
|
data: {
|
|
runId: string;
|
|
cronJobId: string;
|
|
hasLogging: boolean;
|
|
};
|
|
}
|
|
|
|
export interface JobCompletedEvent extends BaseSSEEvent {
|
|
type: "job-completed";
|
|
data: {
|
|
runId: string;
|
|
cronJobId: string;
|
|
exitCode: number;
|
|
duration?: number;
|
|
};
|
|
}
|
|
|
|
export interface JobFailedEvent extends BaseSSEEvent {
|
|
type: "job-failed";
|
|
data: {
|
|
runId: string;
|
|
cronJobId: string;
|
|
exitCode: number;
|
|
error?: string;
|
|
};
|
|
}
|
|
|
|
export interface LogLineEvent extends BaseSSEEvent {
|
|
type: "log-line";
|
|
data: {
|
|
runId: string;
|
|
cronJobId: string;
|
|
line: string;
|
|
lineNumber: number;
|
|
};
|
|
}
|
|
|
|
export interface SystemStatsEvent extends BaseSSEEvent {
|
|
type: "system-stats";
|
|
data: any;
|
|
}
|
|
|
|
export interface HeartbeatEvent extends BaseSSEEvent {
|
|
type: "heartbeat";
|
|
data: {
|
|
message: string;
|
|
};
|
|
}
|
|
|
|
export type SSEEvent =
|
|
| JobStartedEvent
|
|
| JobCompletedEvent
|
|
| JobFailedEvent
|
|
| LogLineEvent
|
|
| SystemStatsEvent
|
|
| HeartbeatEvent;
|
|
|
|
export const formatSSEEvent = (event: SSEEvent): string => {
|
|
return `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`;
|
|
};
|
|
|
|
export const createHeartbeatEvent = (): HeartbeatEvent => {
|
|
return {
|
|
type: "heartbeat",
|
|
timestamp: new Date().toISOString(),
|
|
data: {
|
|
message: "alive",
|
|
},
|
|
};
|
|
};
|