Compare commits

...

3 Commits

3 changed files with 44 additions and 11 deletions

View File

@ -2,40 +2,52 @@ export PATH := $(PATH):`go env GOPATH`/bin
export GO111MODULE=on export GO111MODULE=on
LDFLAGS := -s -w LDFLAGS := -s -w
.PHONY: all
all: env fmt build all: env fmt build
.PHONY: build
build: frps frpc build: frps frpc
.PHONY: env
env: env:
@go version @go version
# compile assets into binary file # compile assets into binary file
.PHONY: file
file: file:
rm -rf ./assets/frps/static/* rm -rf ./assets/frps/static/*
rm -rf ./assets/frpc/static/* rm -rf ./assets/frpc/static/*
cp -rf ./web/frps/dist/* ./assets/frps/static cp -rf ./web/frps/dist/* ./assets/frps/static
cp -rf ./web/frpc/dist/* ./assets/frpc/static cp -rf ./web/frpc/dist/* ./assets/frpc/static
.PHONY: fmt
fmt: fmt:
go fmt ./... go fmt ./...
.PHONY: fmt-more
fmt-more: fmt-more:
gofumpt -l -w . gofumpt -l -w .
.PHONY: gci
gci: gci:
gci write -s standard -s default -s "prefix(github.com/fatedier/frp/)" ./ gci write -s standard -s default -s "prefix(github.com/fatedier/frp/)" ./
.PHONY: vet
vet: vet:
go vet ./... go vet ./...
.PHONY: frps
frps: frps:
env CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -tags frps -o bin/frps ./cmd/frps env CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -tags frps -o bin/frps ./cmd/frps
.PHONY: frpc
frpc: frpc:
env CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -tags frpc -o bin/frpc ./cmd/frpc env CGO_ENABLED=0 go build -trimpath -ldflags "$(LDFLAGS)" -tags frpc -o bin/frpc ./cmd/frpc
.PHONY: test
test: gotest test: gotest
.PHONY: gotest
gotest: gotest:
go test -v --cover ./assets/... go test -v --cover ./assets/...
go test -v --cover ./cmd/... go test -v --cover ./cmd/...
@ -43,12 +55,15 @@ gotest:
go test -v --cover ./server/... go test -v --cover ./server/...
go test -v --cover ./pkg/... go test -v --cover ./pkg/...
.PHONY: e2e
e2e: e2e:
./hack/run-e2e.sh ./hack/run-e2e.sh
.PHONY: e2e-trace
e2e-trace: e2e-trace:
DEBUG=true LOG_LEVEL=trace ./hack/run-e2e.sh DEBUG=true LOG_LEVEL=trace ./hack/run-e2e.sh
.PHONY: e2e-compatibility-last-frpc
e2e-compatibility-last-frpc: e2e-compatibility-last-frpc:
if [ ! -d "./lastversion" ]; then \ if [ ! -d "./lastversion" ]; then \
TARGET_DIRNAME=lastversion ./hack/download.sh; \ TARGET_DIRNAME=lastversion ./hack/download.sh; \
@ -56,6 +71,7 @@ e2e-compatibility-last-frpc:
FRPC_PATH="`pwd`/lastversion/frpc" ./hack/run-e2e.sh FRPC_PATH="`pwd`/lastversion/frpc" ./hack/run-e2e.sh
rm -r ./lastversion rm -r ./lastversion
.PHONY: e2e-compatibility-last-frps
e2e-compatibility-last-frps: e2e-compatibility-last-frps:
if [ ! -d "./lastversion" ]; then \ if [ ! -d "./lastversion" ]; then \
TARGET_DIRNAME=lastversion ./hack/download.sh; \ TARGET_DIRNAME=lastversion ./hack/download.sh; \
@ -63,8 +79,10 @@ e2e-compatibility-last-frps:
FRPS_PATH="`pwd`/lastversion/frps" ./hack/run-e2e.sh FRPS_PATH="`pwd`/lastversion/frps" ./hack/run-e2e.sh
rm -r ./lastversion rm -r ./lastversion
.PHONY: alltest
alltest: vet gotest e2e alltest: vet gotest e2e
.PHONY: clean
clean: clean:
rm -f ./bin/frpc rm -f ./bin/frpc
rm -f ./bin/frps rm -f ./bin/frps

View File

@ -380,18 +380,31 @@ func (svr *Service) stop() {
} }
} }
// TODO(fatedier): Use StatusExporter to provide query interfaces instead of directly using methods from the Service. func (svr *Service) getProxyStatus(name string) (*proxy.WorkingStatus, bool) {
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, fmt.Errorf("control is not running") return nil, false
} }
ws, ok := ctl.pm.GetProxyStatus(name) return ctl.pm.GetProxyStatus(name)
if !ok { }
return nil, fmt.Errorf("proxy [%s] is not found", name)
} func (svr *Service) StatusExporter() StatusExporter {
return ws, nil return &statusExporterImpl{
getProxyStatusFunc: svr.getProxyStatus,
}
}
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,11 +363,13 @@ 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, err := s.vc.Service().GetProxyStatus(name) ps, ok := statusExporter.GetProxyStatus(name)
if err != nil { if !ok {
continue continue
} }
switch ps.Phase { switch ps.Phase {