mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-21 16:38:23 +01:00
connstatus icon
This commit is contained in:
parent
8aa4025907
commit
1975b9b1db
@ -5,6 +5,7 @@ import {
|
|||||||
blockViewToIcon,
|
blockViewToIcon,
|
||||||
blockViewToName,
|
blockViewToName,
|
||||||
ConnectionButton,
|
ConnectionButton,
|
||||||
|
ControllerStatusIcon,
|
||||||
getBlockHeaderIcon,
|
getBlockHeaderIcon,
|
||||||
IconButton,
|
IconButton,
|
||||||
Input,
|
Input,
|
||||||
@ -192,6 +193,7 @@ const BlockFrame_Header = ({
|
|||||||
);
|
);
|
||||||
headerTextElems.unshift(connButtonElem);
|
headerTextElems.unshift(connButtonElem);
|
||||||
}
|
}
|
||||||
|
headerTextElems.unshift(<ControllerStatusIcon blockId={nodeModel.blockId} />);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="block-frame-default-header" ref={dragHandleRef} onContextMenu={onContextMenu}>
|
<div className="block-frame-default-header" ref={dragHandleRef} onContextMenu={onContextMenu}>
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { useLongClick } from "@/app/hook/useLongClick";
|
import { useLongClick } from "@/app/hook/useLongClick";
|
||||||
import { getConnStatusAtom } from "@/app/store/global";
|
import { getConnStatusAtom, waveEventSubscribe, WOS } from "@/app/store/global";
|
||||||
|
import * as services from "@/app/store/services";
|
||||||
|
import { makeORef } from "@/app/store/wos";
|
||||||
import * as util from "@/util/util";
|
import * as util from "@/util/util";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import * as jotai from "jotai";
|
import * as jotai from "jotai";
|
||||||
@ -150,6 +152,51 @@ interface ConnectionButtonProps {
|
|||||||
changeConnModalAtom: jotai.PrimitiveAtom<boolean>;
|
changeConnModalAtom: jotai.PrimitiveAtom<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const ControllerStatusIcon = React.memo(({ blockId }: { blockId: string }) => {
|
||||||
|
const [blockData] = WOS.useWaveObjectValue<Block>(WOS.makeORef("block", blockId));
|
||||||
|
const hasController = !util.isBlank(blockData?.meta?.controller);
|
||||||
|
const [controllerStatus, setControllerStatus] = React.useState<BlockControllerRuntimeStatus>(null);
|
||||||
|
const connection = blockData?.meta?.connection ?? "local";
|
||||||
|
const connStatusAtom = getConnStatusAtom(connection);
|
||||||
|
const connStatus = jotai.useAtomValue(connStatusAtom);
|
||||||
|
React.useEffect(() => {
|
||||||
|
if (!hasController) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const initialRTStatus = services.BlockService.GetControllerStatus(blockId);
|
||||||
|
initialRTStatus.then((rts) => {
|
||||||
|
setControllerStatus(rts);
|
||||||
|
});
|
||||||
|
const unsubFn = waveEventSubscribe("controllerstatus", makeORef("block", blockId), (event) => {
|
||||||
|
const cstatus: BlockControllerRuntimeStatus = event.data;
|
||||||
|
setControllerStatus(cstatus);
|
||||||
|
});
|
||||||
|
return () => {
|
||||||
|
unsubFn();
|
||||||
|
};
|
||||||
|
}, [hasController]);
|
||||||
|
if (!hasController) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
controllerStatus == null ||
|
||||||
|
(controllerStatus?.status == "running" && controllerStatus?.shellprocstatus == "running")
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (connStatus?.status != "connected") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const controllerStatusElem = (
|
||||||
|
<i
|
||||||
|
className="fa-sharp fa-solid fa-triangle-exclamation"
|
||||||
|
title="Controller Is Not Running"
|
||||||
|
style={{ color: "var(--error-color)" }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
return controllerStatusElem;
|
||||||
|
});
|
||||||
|
|
||||||
export const ConnectionButton = React.memo(
|
export const ConnectionButton = React.memo(
|
||||||
React.forwardRef<HTMLDivElement, ConnectionButtonProps>(
|
React.forwardRef<HTMLDivElement, ConnectionButtonProps>(
|
||||||
({ connection, changeConnModalAtom }: ConnectionButtonProps, ref) => {
|
({ connection, changeConnModalAtom }: ConnectionButtonProps, ref) => {
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"github.com/wavetermdev/thenextwave/pkg/shellexec"
|
"github.com/wavetermdev/thenextwave/pkg/shellexec"
|
||||||
"github.com/wavetermdev/thenextwave/pkg/wavebase"
|
"github.com/wavetermdev/thenextwave/pkg/wavebase"
|
||||||
"github.com/wavetermdev/thenextwave/pkg/waveobj"
|
"github.com/wavetermdev/thenextwave/pkg/waveobj"
|
||||||
|
"github.com/wavetermdev/thenextwave/pkg/wps"
|
||||||
"github.com/wavetermdev/thenextwave/pkg/wshrpc"
|
"github.com/wavetermdev/thenextwave/pkg/wshrpc"
|
||||||
"github.com/wavetermdev/thenextwave/pkg/wshutil"
|
"github.com/wavetermdev/thenextwave/pkg/wshutil"
|
||||||
"github.com/wavetermdev/thenextwave/pkg/wstore"
|
"github.com/wavetermdev/thenextwave/pkg/wstore"
|
||||||
@ -124,12 +125,21 @@ func (bc *BlockController) UpdateControllerAndSendUpdate(updateFn func() bool) {
|
|||||||
sendUpdate = updateFn()
|
sendUpdate = updateFn()
|
||||||
})
|
})
|
||||||
if sendUpdate {
|
if sendUpdate {
|
||||||
log.Printf("sending blockcontroller update %#v\n", bc.GetRuntimeStatus())
|
rtStatus := bc.GetRuntimeStatus()
|
||||||
|
log.Printf("sending blockcontroller update %#v\n", rtStatus)
|
||||||
go eventbus.SendEvent(eventbus.WSEventType{
|
go eventbus.SendEvent(eventbus.WSEventType{
|
||||||
EventType: eventbus.WSEvent_BlockControllerStatus,
|
EventType: eventbus.WSEvent_BlockControllerStatus,
|
||||||
ORef: waveobj.MakeORef(waveobj.OType_Block, bc.BlockId).String(),
|
ORef: waveobj.MakeORef(waveobj.OType_Block, bc.BlockId).String(),
|
||||||
Data: bc.GetRuntimeStatus(),
|
Data: rtStatus,
|
||||||
})
|
})
|
||||||
|
waveEvent := wshrpc.WaveEvent{
|
||||||
|
Event: wshrpc.Event_ControllerStatus,
|
||||||
|
Scopes: []string{
|
||||||
|
waveobj.MakeORef(waveobj.OType_Tab, bc.TabId).String(),
|
||||||
|
},
|
||||||
|
Data: rtStatus,
|
||||||
|
}
|
||||||
|
wps.Broker.Publish(waveEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,9 +25,10 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Event_BlockClose = "blockclose"
|
Event_BlockClose = "blockclose"
|
||||||
Event_ConnChange = "connchange"
|
Event_ConnChange = "connchange"
|
||||||
Event_SysInfo = "sysinfo"
|
Event_SysInfo = "sysinfo"
|
||||||
|
Event_ControllerStatus = "controllerstatus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
Loading…
Reference in New Issue
Block a user