Compare commits

..

1 Commits

2 changed files with 9 additions and 24 deletions

View File

@ -380,31 +380,18 @@ func (svr *Service) stop() {
} }
} }
func (svr *Service) getProxyStatus(name string) (*proxy.WorkingStatus, bool) { // TODO(fatedier): Use StatusExporter to provide query interfaces instead of directly using methods from the Service.
func (svr *Service) GetProxyStatus(name string) (*proxy.WorkingStatus, error) {
svr.ctlMu.RLock() svr.ctlMu.RLock()
ctl := svr.ctl ctl := svr.ctl
svr.ctlMu.RUnlock() svr.ctlMu.RUnlock()
if ctl == nil { if ctl == nil {
return nil, false return nil, fmt.Errorf("control is not running")
} }
return ctl.pm.GetProxyStatus(name) ws, ok := ctl.pm.GetProxyStatus(name)
} if !ok {
return nil, fmt.Errorf("proxy [%s] is not found", name)
func (svr *Service) StatusExporter() StatusExporter {
return &statusExporterImpl{
getProxyStatusFunc: svr.getProxyStatus,
} }
} return ws, nil
type StatusExporter interface {
GetProxyStatus(name string) (*proxy.WorkingStatus, bool)
}
type statusExporterImpl struct {
getProxyStatusFunc func(name string) (*proxy.WorkingStatus, bool)
}
func (s *statusExporterImpl) GetProxyStatus(name string) (*proxy.WorkingStatus, bool) {
return s.getProxyStatusFunc(name)
} }

View File

@ -363,13 +363,11 @@ func (s *TunnelServer) waitProxyStatusReady(name string, timeout time.Duration)
timer := time.NewTimer(timeout) timer := time.NewTimer(timeout)
defer timer.Stop() defer timer.Stop()
statusExporter := s.vc.Service().StatusExporter()
for { for {
select { select {
case <-ticker.C: case <-ticker.C:
ps, ok := statusExporter.GetProxyStatus(name) ps, err := s.vc.Service().GetProxyStatus(name)
if !ok { if err != nil {
continue continue
} }
switch ps.Phase { switch ps.Phase {