Skip to content

Commit 456d971

Browse files
committed
refactor: change to an custom WS class that other services can leverage WS as well
1 parent 129a5e6 commit 456d971

File tree

5 files changed

+23
-29
lines changed

5 files changed

+23
-29
lines changed

packages/server/src/controllers/BackendController/BackendController.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,32 @@ import type { BackendControllerTypes } from "@/controllers/BackendController/Bac
44
import { LapController } from "@/controllers/LapController/LapController";
55

66
import DynamoDB from "@/datasources/DynamoDB/DynamoDB";
7-
import { GrafanaWebSocket } from "@/datasources/GrafanaWebSocket/GrafanaWebSocket";
87
import { SocketIO } from "@/datasources/SocketIO/SocketIO";
98
import { SolarMQTTClient } from "@/datasources/SolarMQTTClient/SolarMQTTClient";
109
import { options } from "@/datasources/SolarMQTTClient/SolarMQTTClient.types";
10+
import { NativeWebSocket } from "@/datasources/WebSocket/WebSocket";
1111

1212
import { DatabaseManager } from "@/database/DatabaseManager";
1313
import { logger } from "@/index";
1414
import { type ITelemetryData } from "@shared/helios-types";
1515

16+
const grafanaWsPath = process.env.GRAFANA_WS_PATH ?? "/grafana-ws";
17+
1618
//getDriverInfo
1719
export class BackendController implements BackendControllerTypes {
1820
public dynamoDB: DynamoDB;
1921
public socketIO: SocketIO;
2022
public lapController: LapController;
2123
public mqtt: SolarMQTTClient;
22-
public grafanaWebSocket: GrafanaWebSocket;
24+
public webSocket: NativeWebSocket;
2325
public databaseManager: DatabaseManager;
2426
public carLatency: number;
2527
constructor(
2628
httpsServer: Server<typeof IncomingMessage, typeof ServerResponse>,
2729
) {
2830
this.dynamoDB = new DynamoDB(this);
2931
this.socketIO = new SocketIO(httpsServer, this);
30-
this.grafanaWebSocket = new GrafanaWebSocket(httpsServer, this);
32+
this.webSocket = new NativeWebSocket(grafanaWsPath, httpsServer, this);
3133
this.mqtt = new SolarMQTTClient(options, this);
3234
this.lapController = new LapController(this);
3335
this.databaseManager = DatabaseManager.getInstance();
@@ -69,8 +71,8 @@ export class BackendController implements BackendControllerTypes {
6971
// Broadcast the packet to the frontend
7072
this.socketIO.broadcastPacket(message);
7173

72-
// Broadcast the packet to the grafana web socket
73-
// this.grafanaWebSocket.broadcastPacket(message); // only send the ILapData through WS for now
74+
// Broadcast the packet to the native web socket
75+
// this.webSocket.broadcastPacket(message); // only send the ILapData through WS for now
7476

7577
// Handle the packet in the lap controller
7678
await this.lapController.handlePacket(message);

packages/server/src/controllers/BackendController/BackendController.types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { LapController } from "@/controllers/LapController/LapController";
22

33
import DynamoDB from "@/datasources/DynamoDB/DynamoDB";
4-
import type { GrafanaWebSocket } from "@/datasources/GrafanaWebSocket/GrafanaWebSocket";
54
import type { SocketIO } from "@/datasources/SocketIO/SocketIO";
65
import type { SolarMQTTClient } from "@/datasources/SolarMQTTClient/SolarMQTTClient";
6+
import type { NativeWebSocket } from "@/datasources/WebSocket/WebSocket";
77

88
import type { ITelemetryData } from "@shared/helios-types";
99

@@ -15,5 +15,5 @@ export interface BackendControllerTypes {
1515
lapController: LapController;
1616
mqtt: SolarMQTTClient;
1717
socketIO: SocketIO;
18-
grafanaWebSocket: GrafanaWebSocket;
18+
webSocket: NativeWebSocket;
1919
}

packages/server/src/controllers/LapController/LapController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export class LapController implements LapControllerType {
158158
// this function is for calling when lap completes via lap digital being true
159159
public async handleLapData(lapData: ILapData) {
160160
await this.backendController.socketIO.broadcastLapData(lapData);
161-
await this.backendController.grafanaWebSocket.broadcastLapData(lapData);
161+
await this.backendController.webSocket.broadcastLapData(lapData);
162162
await this.backendController.dynamoDB.insertLapData(lapData);
163163
}
164164

packages/server/src/datasources/GrafanaWebSocket/GrafanaWebSocket.ts renamed to packages/server/src/datasources/WebSocket/WebSocket.ts

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@ import { type WebSocket, WebSocketServer } from "ws";
33

44
import { type BackendController } from "@/controllers/BackendController/BackendController";
55

6-
import { type GrafanaWebSocketType } from "@/datasources/GrafanaWebSocket/GrafanaWebSocket.types";
6+
import { type WebSocketType } from "@/datasources/WebSocket/WebSocket.types";
77

88
import { createLightweightApplicationLogger } from "@/utils/logger";
99

1010
import type { ILapData, ITelemetryData } from "@shared/helios-types";
1111

12-
const logger = createLightweightApplicationLogger("GrafanaWebSocket.ts");
12+
const logger = createLightweightApplicationLogger("WebSocket.ts");
1313

14-
const wsPath = process.env.GRAFANA_WS_PATH ?? "/grafana-ws";
15-
16-
export class GrafanaWebSocket implements GrafanaWebSocketType {
14+
export class NativeWebSocket implements WebSocketType {
1715
wss: WebSocketServer;
1816
backendController: BackendController;
1917
constructor(
18+
wsPath: string,
2019
httpsServer: Server<typeof IncomingMessage, typeof ServerResponse>,
2120
backendController: BackendController,
2221
) {
@@ -28,7 +27,7 @@ export class GrafanaWebSocket implements GrafanaWebSocketType {
2827

2928
this.wss.on("connection", (ws: WebSocket, req: IncomingMessage) => {
3029
logger.info(
31-
`Grafana WebSocket client connected from ${req.socket.remoteAddress}`,
30+
`WebSocket client connected from ${req.socket.remoteAddress}`,
3231
);
3332
this.initializeWebSocketListeners(ws);
3433
ws.send(
@@ -42,9 +41,7 @@ export class GrafanaWebSocket implements GrafanaWebSocketType {
4241

4342
public broadcastPacket(packet: ITelemetryData): void {
4443
if (this.wss.clients.size === 0) {
45-
logger.debug(
46-
"No Grafana WebSocket clients connected, skipping broadcast",
47-
);
44+
logger.debug("No WebSocket clients connected, skipping broadcast");
4845
return;
4946
}
5047
const message = {
@@ -55,19 +52,14 @@ export class GrafanaWebSocket implements GrafanaWebSocketType {
5552
try {
5653
ws.send(JSON.stringify(message));
5754
} catch (error) {
58-
logger.error(
59-
"Error broadcasting telemetry packet to Grafana WS",
60-
error,
61-
);
55+
logger.error("Error broadcasting telemetry packet to WS", error);
6256
}
6357
});
6458
}
6559

6660
public broadcastLapData(lapData: ILapData): void {
6761
if (this.wss.clients.size === 0) {
68-
logger.debug(
69-
"No Grafana WebSocket clients connected, skipping broadcast",
70-
);
62+
logger.debug("No WebSocket clients connected, skipping broadcast");
7163
return;
7264
}
7365

@@ -79,20 +71,20 @@ export class GrafanaWebSocket implements GrafanaWebSocketType {
7971
try {
8072
ws.send(JSON.stringify(message));
8173
} catch (error) {
82-
logger.error("Error broadcasting lap data to Grafana WS", error);
74+
logger.error("Error broadcasting lap data to WS", error);
8375
}
8476
});
8577
}
8678

8779
public initializeWebSocketListeners(ws: WebSocket): void {
8880
ws.on("close", () => {
89-
logger.info("Grafana WebSocket client disconnected");
81+
logger.info("WebSocket client disconnected");
9082
});
9183

9284
ws.on("error", (error: Error) => {
93-
logger.error("Grafana WebSocket error:", error);
85+
logger.error("WebSocket error:", error);
9486
});
9587
}
9688
}
9789

98-
export default GrafanaWebSocket;
90+
export default WebSocket;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { WebSocketServer } from "ws";
22

33
import type { ILapData, ITelemetryData } from "@shared/helios-types";
44

5-
export interface GrafanaWebSocketType {
5+
export interface WebSocketType {
66
broadcastLapData(lapData: ILapData): void;
77
broadcastPacket(packet: ITelemetryData): void;
88
wss: WebSocketServer;

0 commit comments

Comments
 (0)