mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
implement globalstore callback for cmd status changes
This commit is contained in:
+25
-2
@@ -32,8 +32,9 @@ const (
|
|||||||
var GlobalStore *Store
|
var GlobalStore *Store
|
||||||
|
|
||||||
type Store struct {
|
type Store struct {
|
||||||
Lock *sync.Mutex
|
Lock *sync.Mutex
|
||||||
Map map[string]*MShellProc // key=remoteid
|
Map map[string]*MShellProc // key=remoteid
|
||||||
|
CmdStatusCallback func(ck base.CommandKey, status string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteState struct {
|
type RemoteState struct {
|
||||||
@@ -53,6 +54,8 @@ type MShellProc struct {
|
|||||||
Status string
|
Status string
|
||||||
ServerProc *shexec.ClientProc
|
ServerProc *shexec.ClientProc
|
||||||
Err error
|
Err error
|
||||||
|
|
||||||
|
RunningCmds []base.CommandKey
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadRemotes(ctx context.Context) error {
|
func LoadRemotes(ctx context.Context) error {
|
||||||
@@ -227,9 +230,16 @@ func RunCommand(ctx context.Context, pk *scpacket.FeCommandPacketType, cmdId str
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
msh.AddRunningCmd(startPk.CK)
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msh *MShellProc) AddRunningCmd(ck base.CommandKey) {
|
||||||
|
msh.Lock.Lock()
|
||||||
|
defer msh.Lock.Unlock()
|
||||||
|
msh.RunningCmds = append(msh.RunningCmds, ck)
|
||||||
|
}
|
||||||
|
|
||||||
func (msh *MShellProc) PacketRpc(ctx context.Context, pk packet.RpcPacketType) (*packet.ResponsePacketType, error) {
|
func (msh *MShellProc) PacketRpc(ctx context.Context, pk packet.RpcPacketType) (*packet.ResponsePacketType, error) {
|
||||||
if !msh.IsConnected() {
|
if !msh.IsConnected() {
|
||||||
return nil, fmt.Errorf("runner is not connected")
|
return nil, fmt.Errorf("runner is not connected")
|
||||||
@@ -277,6 +287,9 @@ func (msh *MShellProc) handleCmdDonePacket(donePk *packet.CmdDonePacketType) {
|
|||||||
fmt.Printf("[error] updating cmddone: %v\n", err)
|
fmt.Printf("[error] updating cmddone: %v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if GlobalStore.CmdStatusCallback != nil {
|
||||||
|
GlobalStore.CmdStatusCallback(donePk.CK, sstore.CmdStatusDone)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,6 +302,15 @@ func (msh *MShellProc) handleCmdErrorPacket(errPk *packet.CmdErrorPacketType) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msh *MShellProc) notifyHangups_nolock() {
|
||||||
|
if GlobalStore.CmdStatusCallback != nil {
|
||||||
|
for _, ck := range msh.RunningCmds {
|
||||||
|
GlobalStore.CmdStatusCallback(ck, sstore.CmdStatusHangup)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msh.RunningCmds = nil
|
||||||
|
}
|
||||||
|
|
||||||
func (runner *MShellProc) ProcessPackets() {
|
func (runner *MShellProc) ProcessPackets() {
|
||||||
defer runner.WithLock(func() {
|
defer runner.WithLock(func() {
|
||||||
if runner.Status == StatusConnected {
|
if runner.Status == StatusConnected {
|
||||||
@@ -298,6 +320,7 @@ func (runner *MShellProc) ProcessPackets() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[error] calling HUP on remoteid=%d cmds\n", runner.Remote.RemoteId)
|
fmt.Printf("[error] calling HUP on remoteid=%d cmds\n", runner.Remote.RemoteId)
|
||||||
}
|
}
|
||||||
|
runner.notifyHangups_nolock()
|
||||||
})
|
})
|
||||||
for pk := range runner.ServerProc.Output.MainCh {
|
for pk := range runner.ServerProc.Output.MainCh {
|
||||||
if pk.GetType() == packet.DataPacketStr {
|
if pk.GetType() == packet.DataPacketStr {
|
||||||
|
|||||||
Reference in New Issue
Block a user