mirror of
https://github.com/jkstack/libagent.git
synced 2025-12-24 12:11:57 +08:00
增加Status接口
This commit is contained in:
10
agent.go
10
agent.go
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user