feat(telemetry): expose compute pipeline stage metrics
This commit is contained in:
@@ -14,6 +14,7 @@ export interface ComputeContour {
|
||||
mqtt_host: string;
|
||||
mqtt_port: number;
|
||||
telemetry_poll_interval_seconds: number;
|
||||
mqtt_publish_interval_seconds: number;
|
||||
revision: number;
|
||||
updated_at_utc: string | null;
|
||||
}
|
||||
@@ -33,6 +34,7 @@ export interface ComputeContourDraft {
|
||||
mqtt_host: string;
|
||||
mqtt_port: number;
|
||||
telemetry_poll_interval_seconds: number;
|
||||
mqtt_publish_interval_seconds: number;
|
||||
}
|
||||
|
||||
export interface ComputeContourAgentInstall {
|
||||
@@ -99,6 +101,7 @@ export async function createComputeContour(
|
||||
mqtt_host: draft.mqtt_host,
|
||||
mqtt_port: draft.mqtt_port,
|
||||
telemetry_poll_interval_seconds: draft.telemetry_poll_interval_seconds,
|
||||
mqtt_publish_interval_seconds: draft.mqtt_publish_interval_seconds,
|
||||
}),
|
||||
signal,
|
||||
});
|
||||
|
||||
@@ -16,6 +16,7 @@ export interface WorkerTelemetryState {
|
||||
}
|
||||
|
||||
export function useWorkerTelemetry(
|
||||
contourId: string | null,
|
||||
pollMilliseconds = DEFAULT_WORKER_TELEMETRY_POLL_MILLISECONDS,
|
||||
enabled = true,
|
||||
externalRefreshGeneration = 0,
|
||||
@@ -30,7 +31,7 @@ export function useWorkerTelemetry(
|
||||
const refresh = useCallback(() => setGeneration((value) => value + 1), []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!enabled) {
|
||||
if (!enabled || !contourId) {
|
||||
setTelemetry(null);
|
||||
setLoading(false);
|
||||
setError(null);
|
||||
@@ -38,7 +39,7 @@ export function useWorkerTelemetry(
|
||||
}
|
||||
const controller = new AbortController();
|
||||
setLoading(true);
|
||||
void fetchWorkerTelemetry(controller.signal)
|
||||
void fetchWorkerTelemetry(contourId, controller.signal)
|
||||
.then((document) => {
|
||||
if (controller.signal.aborted) return;
|
||||
setTelemetry(document);
|
||||
@@ -52,7 +53,7 @@ export function useWorkerTelemetry(
|
||||
if (!controller.signal.aborted) setLoading(false);
|
||||
});
|
||||
return () => controller.abort();
|
||||
}, [enabled, externalRefreshGeneration, generation]);
|
||||
}, [contourId, enabled, externalRefreshGeneration, generation]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!enabled || loading) return;
|
||||
|
||||
@@ -181,13 +181,17 @@ async function requestJson(
|
||||
}
|
||||
|
||||
export async function fetchWorkerTelemetry(
|
||||
contourId: string,
|
||||
signal?: AbortSignal,
|
||||
): Promise<WorkerTelemetry> {
|
||||
const document = requireJsonRecord(
|
||||
await requestJson("/api/v1/system/worker-telemetry?history=90", {
|
||||
method: "GET",
|
||||
signal,
|
||||
}),
|
||||
await requestJson(
|
||||
`/api/v1/system/contours/${encodeURIComponent(contourId)}/telemetry?history=90`,
|
||||
{
|
||||
method: "GET",
|
||||
signal,
|
||||
},
|
||||
),
|
||||
"missioncore.worker-telemetry/v1",
|
||||
);
|
||||
if (
|
||||
@@ -198,7 +202,7 @@ export async function fetchWorkerTelemetry(
|
||||
|| !isRecord(document.network)
|
||||
|| !Array.isArray(document.history)
|
||||
) {
|
||||
throw new Error("Срез Worker 006 неполон.");
|
||||
throw new Error("Срез вычислительного контура неполон.");
|
||||
}
|
||||
return document as unknown as WorkerTelemetry;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user