From 68c772785bbe89504be510e18583e486f00c27d0 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 5 Feb 2025 13:59:41 -0800 Subject: [PATCH] Add DU network operations --- Client/src/Utils/NetworkService.js | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Client/src/Utils/NetworkService.js b/Client/src/Utils/NetworkService.js index 85e82554e..20b19e5dc 100644 --- a/Client/src/Utils/NetworkService.js +++ b/Client/src/Utils/NetworkService.js @@ -862,6 +862,76 @@ class NetworkService { ); } + subscribeToDistributedUptimeMonitors(config) { + const { + authToken, + teamId, + onUpdate, + onError, + onOpen, + limit, + types, + page, + rowsPerPage, + filter, + field, + order, + } = config; + + const params = new URLSearchParams(); + + if (limit) params.append("limit", limit); + if (types) { + types.forEach((type) => { + params.append("type", type); + }); + } + if (page) params.append("page", page); + if (rowsPerPage) params.append("rowsPerPage", rowsPerPage); + if (filter) params.append("filter", filter); + if (field) params.append("field", field); + if (order) params.append("order", order); + + if (this.eventSource) { + this.eventSource.close(); + } + + const url = `${this.axiosInstance.defaults.baseURL}/distributed-uptime/monitors/${teamId}?${params.toString()}`; + this.eventSource = new EventSource(url, { + headers: { Authorization: `Bearer ${authToken}` }, + }); + + this.eventSource.onopen = () => { + onOpen?.(); + }; + + this.eventSource.addEventListener("open", (e) => { + console.log("getDistributedUptimeMonitors connection opened:"); + }); + + this.eventSource.onmessage = (event) => { + const data = JSON.parse(event.data); + onUpdate(data); + }; + + this.eventSource.onerror = (error) => { + console.error("Monitor stream error:", error); + onError?.(); + this.eventSource.close(); + }; + + // Returns a cleanup function + return () => { + if (this.eventSource) { + this.eventSource.close(); + this.eventSource = null; + } + return () => { + console.log("Nothing to cleanup"); + }; + }; + } + async getStatusPage(config) { const { authToken } = config; return this.axiosInstance.get(`/status-page`, {