MCPcopy
hub / github.com/wavetermdev/waveterm / SysinfoView

Function SysinfoView

frontend/app/view/sysinfo/sysinfo.tsx:347–394  ·  view source on GitHub ↗
({ model, blockId }: SysinfoViewProps)

Source from the content-addressed store, hash-verified

345}
346
347function SysinfoView({ model, blockId }: SysinfoViewProps) {
348 const connName = jotai.useAtomValue(model.connection);
349 const lastConnName = React.useRef(connName);
350 const connStatus = jotai.useAtomValue(model.connStatus);
351 const addContinuousData = jotai.useSetAtom(model.addContinuousDataAtom);
352 const loading = jotai.useAtomValue(model.loadingAtom);
353
354 React.useEffect(() => {
355 if (connStatus?.status != "connected") {
356 return;
357 }
358 if (lastConnName.current !== connName) {
359 lastConnName.current = connName;
360 model.loadInitialData();
361 }
362 }, [connStatus.status, connName]);
363 React.useEffect(() => {
364 const unsubFn = waveEventSubscribeSingle({
365 eventType: "sysinfo",
366 scope: connName,
367 handler: (event) => {
368 const loading = globalStore.get(model.loadingAtom);
369 if (loading) {
370 return;
371 }
372 const dataItem = convertWaveEventToDataItem(event);
373 const prevData = globalStore.get(model.dataAtom);
374 const prevLastTs = prevData[prevData.length - 1]?.ts ?? 0;
375 if (dataItem.ts - prevLastTs > 2000) {
376 model.loadInitialData();
377 } else {
378 addContinuousData(dataItem);
379 }
380 },
381 });
382 console.log("subscribe to sysinfo", connName);
383 return () => {
384 unsubFn();
385 };
386 }, [connName, addContinuousData]);
387 if (connStatus?.status != "connected") {
388 return null;
389 }
390 if (loading) {
391 return null;
392 }
393 return <SysinfoViewInner key={connStatus?.connection ?? "local"} blockId={blockId} model={model} />;
394}
395
396type SingleLinePlotProps = {
397 plotData: Array<DataItem>;

Callers

nothing calls this directly

Calls 4

waveEventSubscribeSingleFunction · 0.90
loadInitialDataMethod · 0.80
getMethod · 0.80

Tested by

no test coverage detected