mirror of
https://github.com/csehviktor/status-monitor.git
synced 2026-04-28 16:27:34 +02:00
use dynamic urls
This commit is contained in:
@@ -4,14 +4,14 @@ import { getLastMessage, setLastMessage } from "@/services/store";
|
|||||||
import { initializeConnection } from "@/services/websocket";
|
import { initializeConnection } from "@/services/websocket";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export function useWebsocket(url: string) {
|
export function useWebsocket(agent: string) {
|
||||||
const [status, setStatus] = useState<WebsocketStatus>();
|
const [status, setStatus] = useState<WebsocketStatus>();
|
||||||
const [message, setMessage] = useState<StatusMessage | null>(
|
const [message, setMessage] = useState<StatusMessage | null>(
|
||||||
getLastMessage(),
|
getLastMessage(),
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
initializeConnection(url, {
|
initializeConnection(agent, {
|
||||||
onMessage: (data) => {
|
onMessage: (data) => {
|
||||||
const parsed = JSON.parse(data);
|
const parsed = JSON.parse(data);
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ export function useWebsocket(url: string) {
|
|||||||
onClose: () => setStatus("disconnected"),
|
onClose: () => setStatus("disconnected"),
|
||||||
onError: () => setStatus("error"),
|
onError: () => setStatus("error"),
|
||||||
});
|
});
|
||||||
}, [url]);
|
}, [agent]);
|
||||||
|
|
||||||
return { status, message };
|
return { status, message };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,18 +20,16 @@ import { TimePeriodSelector } from "@/components/TimePeriodSelector";
|
|||||||
|
|
||||||
export function AgentPage() {
|
export function AgentPage() {
|
||||||
const { agent } = useParams();
|
const { agent } = useParams();
|
||||||
const { status, message } = useWebsocket(`ws://localhost:3000/ws/${agent}`);
|
const { status, message } = useWebsocket(agent!);
|
||||||
|
|
||||||
const [period, setPeriod] = useState<TimePeriod>("realtime");
|
const [period, setPeriod] = useState<TimePeriod>("realtime");
|
||||||
const [history, setHistory] = useState<StatusMessage[] | null>(null);
|
const [history, setHistory] = useState<StatusMessage[] | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (period === "realtime") return;
|
if (!agent || period === "realtime") return;
|
||||||
|
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
const data = await getHistoricalData(
|
const data = await getHistoricalData(agent, period);
|
||||||
`http://localhost:3000/history/${agent}/${period}`,
|
|
||||||
);
|
|
||||||
setHistory(data);
|
setHistory(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,15 @@ export function getRealtimeData(): StatusMessage[] {
|
|||||||
return realtimeData ?? [];
|
return realtimeData ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getHistoricalData(url: string): Promise<StatusMessage[]> {
|
export async function getHistoricalData(
|
||||||
return await fetch(url)
|
agent: string,
|
||||||
|
period: string,
|
||||||
|
): Promise<StatusMessage[]> {
|
||||||
|
return await fetch(
|
||||||
|
import.meta.env.DEV
|
||||||
|
? `http://localhost:3000/agent/${agent}/${period}`
|
||||||
|
: `/agent/${agent}`,
|
||||||
|
)
|
||||||
.then((res) => res.json())
|
.then((res) => res.json())
|
||||||
.then((data) => data as StatusMessage[]);
|
.then((data) => data as StatusMessage[]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,12 @@ type Callbacks = {
|
|||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function initializeConnection(url: string, callbacks: Callbacks) {
|
export function initializeConnection(agent: string, callbacks: Callbacks) {
|
||||||
const ws = new WebSocket(url);
|
const ws = new WebSocket(
|
||||||
|
import.meta.env.DEV
|
||||||
|
? `ws://localhost:3000/ws/${agent}`
|
||||||
|
: `/ws/${agent}`,
|
||||||
|
);
|
||||||
|
|
||||||
ws.onopen = () => callbacks.onOpen?.();
|
ws.onopen = () => callbacks.onOpen?.();
|
||||||
ws.onmessage = (event) => callbacks.onMessage(event.data);
|
ws.onmessage = (event) => callbacks.onMessage(event.data);
|
||||||
|
|||||||
Reference in New Issue
Block a user