增加Status接口

This commit is contained in:
lwch
2022-11-16 15:37:30 +08:00
parent f8a55c67c8
commit 7d877035f5
3 changed files with 41 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/jkstack/anet"
"github.com/jkstack/libagent/conf"
"github.com/jkstack/libagent/internal/utils"
"github.com/kardianos/service"
)
// App app 接口每一个agent必须实现以下接口
@@ -90,3 +91,12 @@ func Stop(app App) error {
}
return svc.Stop()
}
// Status 获取服务状态
func Status(app App) (service.Status, error) {
svc, err := newService(app)
if err != nil {
return service.StatusUnknown, err
}
return svc.Status()
}

View File

@@ -1,10 +1,13 @@
package agent
import "github.com/kardianos/service"
type builtinService interface {
Install() error
Uninstall() error
Run() error
Start() error
Stop() error
Status() (service.Status, error)
Platform() string
}

View File

@@ -9,6 +9,7 @@ import (
"github.com/btcsuite/winsvc/mgr"
"github.com/btcsuite/winsvc/svc"
"github.com/jkstack/jkframe/logging"
"github.com/kardianos/service"
)
type svr struct {
@@ -157,3 +158,30 @@ func (svr *svr) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<
func (svr *svr) Platform() string {
return "windows-service"
}
func (svr *svr) Status() (service.Status, error) {
m, err := mgr.Connect()
if err != nil {
logging.Error("mgr connect: %v", err)
return service.StatusUnknown, err
}
defer m.Disconnect()
s, err := m.OpenService(svr.agentName)
if err != nil {
return service.StatusUnknown, fmt.Errorf("could not access service: %v", err)
}
defer s.Close()
status, err := s.Query()
if err != nil {
logging.Error("query status: %v", err)
return service.StatusUnknown, fmt.Errorf("could not retrieve service status: %v", err)
}
switch status.State {
case svc.Stopped:
return service.StatusStopped, nil
case svc.Running:
return service.StatusRunning, nil
default:
return service.StatusUnknown, nil
}
}