diff --git a/.gitignore b/.gitignore index c3f4fbd0d..f5ff4aab1 100644 --- a/.gitignore +++ b/.gitignore @@ -34,12 +34,8 @@ coverage.html .*.uptodate scope.tar scope_ui_build.tar -prog/app/app -prog/app/scope-app -prog/probe/probe -prog/probe/scope-probe -docker/scope-app -docker/scope-probe +prog/scope +docker/scope docker/docker* docker/weave docker/runsvinit @@ -55,4 +51,4 @@ experimental/_integration/_integration *sublime-workspace *npm-debug.log app/static.go -prog/app/static.go +prog/static.go diff --git a/Makefile b/Makefile index 3bc6d1f4d..dfe9cf348 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,7 @@ # If you can use Docker without being root, you can `make SUDO= ` SUDO=sudo -E DOCKERHUB_USER=weaveworks -APP_EXE=prog/app/scope-app -PROBE_EXE=prog/probe/scope-probe -FIXPROBE_EXE=experimental/fixprobe/fixprobe +SCOPE_EXE=prog/scope SCOPE_IMAGE=$(DOCKERHUB_USER)/scope SCOPE_EXPORT=scope.tar SCOPE_UI_BUILD_IMAGE=$(DOCKERHUB_USER)/scope-ui-build @@ -30,24 +28,22 @@ docker/weave: curl -L git.io/weave -o docker/weave chmod u+x docker/weave -$(SCOPE_EXPORT): $(APP_EXE) $(PROBE_EXE) $(DOCKER_DISTRIB) docker/weave $(RUNSVINIT) docker/Dockerfile docker/run-app docker/run-probe docker/entrypoint.sh - cp $(APP_EXE) $(PROBE_EXE) $(RUNSVINIT) docker/ +$(SCOPE_EXPORT): $(SCOPE_EXE) $(DOCKER_DISTRIB) docker/weave $(RUNSVINIT) docker/Dockerfile docker/run-app docker/run-probe docker/entrypoint.sh + cp $(SCOPE_EXE) $(RUNSVINIT) docker/ cp $(DOCKER_DISTRIB) docker/docker.tgz $(SUDO) docker build -t $(SCOPE_IMAGE) docker/ $(SUDO) docker save $(SCOPE_IMAGE):latest > $@ $(RUNSVINIT): vendor/runsvinit/*.go -$(APP_EXE): app/*.go render/*.go report/*.go xfer/*.go common/sanitize/*.go prog/app/*.go prog/app/static.go - -$(PROBE_EXE): prog/probe/*.go $(shell find probe/ -type f -name *.go) report/*.go xfer/*.go common/sanitize/*.go common/exec/*.go +$(SCOPE_EXE): $(shell find ./ -type f -name *.go) prog/static.go ifeq ($(BUILD_IN_CONTAINER),true) -$(APP_EXE) $(PROBE_EXE) $(RUNSVINIT): $(SCOPE_BACKEND_BUILD_UPTODATE) +$(SCOPE_EXE) $(RUNSVINIT): $(SCOPE_BACKEND_BUILD_UPTODATE) $(SUDO) docker run $(RM) $(RUN_FLAGS) -v $(shell pwd):/go/src/github.com/weaveworks/scope -e GOARCH -e GOOS \ $(SCOPE_BACKEND_BUILD_IMAGE) SCOPE_VERSION=$(SCOPE_VERSION) $@ else -$(APP_EXE) $(PROBE_EXE): $(SCOPE_BACKEND_BUILD_UPTODATE) +$(SCOPE_EXE): $(SCOPE_BACKEND_BUILD_UPTODATE) go build -ldflags "-extldflags \"-static\" -X main.version=$(SCOPE_VERSION)" -tags netgo -o $@ ./$(@D) @strings $@ | grep cgo_stub\\\.go >/dev/null || { \ rm $@; \ @@ -62,9 +58,9 @@ $(RUNSVINIT): go build -ldflags "-extldflags \"-static\"" -o $@ ./$(@D) endif -static: prog/app/static.go +static: prog/static.go -prog/app/static.go: client/build/app.js +prog/static.go: client/build/app.js esc -o $@ -prefix client/build client/build ifeq ($(BUILD_IN_CONTAINER),true) @@ -105,7 +101,7 @@ clean: go clean ./... $(SUDO) docker rmi $(SCOPE_UI_BUILD_IMAGE) $(SCOPE_BACKEND_BUILD_IMAGE) >/dev/null 2>&1 || true rm -rf $(SCOPE_EXPORT) $(SCOPE_UI_BUILD_UPTODATE) $(SCOPE_BACKEND_BUILD_UPTODATE) \ - $(APP_EXE) $(PROBE_EXE) $(RUNSVINIT) client/build/app.js docker/weave + $(SCOPE_EXE) $(RUNSVINIT) prog/static.go client/build/app.js docker/weave ifeq ($(BUILD_IN_CONTAINER),true) tests: $(SCOPE_BACKEND_BUILD_UPTODATE) diff --git a/circle.yml b/circle.yml index db3225a4a..f86fa75e9 100644 --- a/circle.yml +++ b/circle.yml @@ -39,9 +39,9 @@ test: parallel: true - cd $SRCDIR; make RM= static: parallel: true - - cd $SRCDIR; rm -f prog/app/scope-app prog/probe/scope-probe; if [ "$CIRCLE_NODE_INDEX" = "0" ]; then GOARCH=arm make RM= prog/app/scope-app prog/probe/scope-probe; else GOOS=darwin make RM= prog/app/scope-app prog/probe/scope-probe; fi: + - cd $SRCDIR; rm -f prog/scope; if [ "$CIRCLE_NODE_INDEX" = "0" ]; then GOARCH=arm make RM= prog/scope; else GOOS=darwin make RM= prog/scope; fi: parallel: true - - cd $SRCDIR; rm -f prog/app/scope-app prog/probe/scope-probe; make RM=: + - cd $SRCDIR; rm -f prog/scope; make RM=: parallel: true - cd $SRCDIR/experimental; ./build_on_circle.sh: parallel: true diff --git a/docker/Dockerfile b/docker/Dockerfile index c794b56ce..8744813df 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -7,7 +7,7 @@ RUN echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >>/etc/apk/repositori rm -rf /var/cache/apk/* ADD ./docker.tgz / ADD ./weave /usr/bin/ -COPY ./scope-app ./scope-probe ./runsvinit ./entrypoint.sh /home/weave/ +COPY ./scope ./runsvinit ./entrypoint.sh /home/weave/ COPY ./run-app /etc/service/app/run COPY ./run-probe /etc/service/probe/run EXPOSE 4040 diff --git a/docker/run-app b/docker/run-app index b5542a862..b3caffc51 100755 --- a/docker/run-app +++ b/docker/run-app @@ -1,3 +1,3 @@ #!/bin/sh -exec /home/weave/scope-app $(cat /etc/weave/scope-app.args) +exec /home/weave/scope app $(cat /etc/weave/scope-app.args) diff --git a/docker/run-probe b/docker/run-probe index 517a3f518..ef8022c9b 100755 --- a/docker/run-probe +++ b/docker/run-probe @@ -1,3 +1,3 @@ #!/bin/sh -exec /home/weave/scope-probe $(cat /etc/weave/scope-probe.args) $(cat /etc/weave/apps) +exec /home/weave/scope probe $(cat /etc/weave/scope-probe.args) $(cat /etc/weave/apps) diff --git a/prog/app/main.go b/prog/app.go similarity index 91% rename from prog/app/main.go rename to prog/app.go index 6c6bc709a..415932057 100644 --- a/prog/app/main.go +++ b/prog/app.go @@ -19,7 +19,7 @@ import ( ) // Router creates the mux for all the various app components. -func Router(c app.Collector) *mux.Router { +func router(c app.Collector) *mux.Router { router := mux.NewRouter() app.RegisterTopologyRoutes(c, router) app.RegisterReportPostHandler(c, router) @@ -28,7 +28,8 @@ func Router(c app.Collector) *mux.Router { return router } -func main() { +// Main runs the app +func appMain() { var ( window = flag.Duration("window", 15*time.Second, "window") listen = flag.String("http.address", ":"+strconv.Itoa(xfer.AppPort), "webserver listen address") @@ -52,7 +53,7 @@ func main() { rand.Seed(time.Now().UnixNano()) app.UniqueID = strconv.FormatInt(rand.Int63(), 16) log.Printf("app starting, version %s, ID %s", app.Version, app.UniqueID) - http.Handle("/", Router(app.NewCollector(*window))) + http.Handle("/", router(app.NewCollector(*window))) go func() { log.Printf("listening on %s", *listen) log.Print(http.ListenAndServe(*listen, nil)) diff --git a/prog/main.go b/prog/main.go new file mode 100644 index 000000000..01926360c --- /dev/null +++ b/prog/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "fmt" + "os" +) + +func usage() { + fmt.Fprintf(os.Stderr, "usage: %s (app|probe) args...\n", os.Args[0]) + os.Exit(1) +} + +func main() { + if len(os.Args) < 2 { + usage() + } + + module := os.Args[1] + os.Args = append([]string{os.Args[0]}, os.Args[2:]...) + + switch module { + case "app": + appMain() + case "probe": + probeMain() + default: + usage() + } +} diff --git a/prog/probe/main.go b/prog/probe.go similarity index 99% rename from prog/probe/main.go rename to prog/probe.go index ee102ed75..d289e4020 100644 --- a/prog/probe/main.go +++ b/prog/probe.go @@ -31,7 +31,8 @@ import ( var version = "dev" // set at build time -func main() { +// Main runs the probe +func probeMain() { var ( targets = []string{fmt.Sprintf("localhost:%d", xfer.AppPort), fmt.Sprintf("scope.weave.local:%d", xfer.AppPort)} token = flag.String("token", "default-token", "probe token")