monitor/shared/socketioTypes.ts
2025-04-16 22:30:27 +07:00

120 lines
3.0 KiB
TypeScript

import { SvRtPerfThreadNamesType } from "@core/modules/Metrics/svRuntime/config";
import { SvRtNodeMemoryType, SvRtPerfBoundariesType } from "@core/modules/Metrics/svRuntime/perfSchemas";
import type { ReactAuthDataType } from "./authApiTypes";
import type { UpdateDataType } from "./otherTypes";
import { DiscordBotStatus, TxConfigState, type FxMonitorHealth } from "./enums";
/**
* Status channel
*/
export type GlobalStatusType = {
configState: TxConfigState;
discord: DiscordBotStatus;
runner: {
isIdle: boolean;
isChildAlive: boolean;
};
server: {
name: string;
uptime: number;
health: FxMonitorHealth;
healthReason: string;
whitelist: 'disabled' | 'adminOnly' | 'approvedLicense' | 'discordMember' | 'discordRoles';
};
scheduler: {
nextRelativeMs: number;
nextSkip: boolean;
nextIsTemp: boolean;
} | {
nextRelativeMs: false;
nextSkip: false;
nextIsTemp: false;
};
}
/**
* Status channel
*/
export type DashboardSvRuntimeDataType = {
fxsMemory?: number;
nodeMemory?: SvRtNodeMemoryType;
perfBoundaries?: SvRtPerfBoundariesType;
perfBucketCounts?: {
[key in SvRtPerfThreadNamesType]: number[];
};
}
export type DashboardPleyerDropDataType = {
summaryLast6h: [reasonCategory: string, count: number][];
};
export type DashboardDataEventType = {
svRuntime: DashboardSvRuntimeDataType;
playerDrop: DashboardPleyerDropDataType;
// joinLeaveTally30m: {
// joined: number;
// left: number;
// };
}
/**
* Playerlist channel
* TODO: apply those types to the playerlistManager
*/
export type FullPlayerlistEventType = {
mutex: string | null,
type: 'fullPlayerlist',
playerlist: PlayerlistPlayerType[],
}
export type PlayerlistPlayerType = {
netid: number,
displayName: string,
pureName: string,
ids: string[],
license: string | null,
}
export type PlayerDroppedEventType = {
mutex: string,
type: 'playerDropped',
netid: number,
reasonCategory?: string, //missing in case of server shutdown
}
export type PlayerJoiningEventType = {
mutex: string,
type: 'playerJoining',
} & PlayerlistPlayerType;
export type PlayerlistEventType = FullPlayerlistEventType | PlayerDroppedEventType | PlayerJoiningEventType;
/**
* Standalone events (no room)
*/
export type UpdateAvailableEventType = {
fxserver?: UpdateDataType;
txadmin?: UpdateDataType;
}
/**
* Listen Events Map
*/
export type ListenEventsMap = {
error: (reason?: string) => void;
logout: (reason?: string) => void;
refreshToUpdate: () => void;
txAdminShuttingDown: () => void;
status: (status: GlobalStatusType) => void;
playerlist: (playerlistData: PlayerlistEventType[]) => void;
updateAuthData: (authData: ReactAuthDataType) => void;
consoleData: (data: string) => void;
dashboard: (data: DashboardDataEventType) => void;
//Standalone events
updateAvailable: (event: UpdateAvailableEventType) => void
};