Skip to content

Commit

Permalink
server: a simple http server that serves the HUD view (#877)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicks committed Dec 21, 2018
1 parent 95b5322 commit d96547d
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 68 deletions.
30 changes: 28 additions & 2 deletions internal/cli/up.go
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"log"
"net/http"
"time"

"github.com/fatih/color"
Expand All @@ -29,6 +30,7 @@ type upCmd struct {
traceTags string
hud bool
autoDeploy bool
port int
}

func (c *upCmd) register() *cobra.Command {
Expand All @@ -47,6 +49,7 @@ func (c *upCmd) register() *cobra.Command {
cmd.Flags().BoolVar(&c.hud, "hud", true, "If true, tilt will open in HUD mode.")
cmd.Flags().BoolVar(&c.autoDeploy, "auto-deploy", true, "If false, tilt will wait on <spacebar> to trigger builds")
cmd.Flags().BoolVar(&logActionsFlag, "logactions", false, "log all actions and state changes")
cmd.Flags().IntVar(&c.port, "port", 0, "Port for the Tilt HTTP server")
cmd.Flags().Lookup("logactions").Hidden = true
err := cmd.Flags().MarkHidden("image-tag-prefix")
if err != nil {
Expand Down Expand Up @@ -76,12 +79,14 @@ func (c *upCmd) run(ctx context.Context, args []string) error {
span.SetTag(k, v)
}

uh, err := wireHudAndUpper(ctx)
threads, err := wireThreads(ctx)
if err != nil {
return err
}

upper, h := uh.upper, uh.hud
upper := threads.upper
h := threads.hud
server := threads.server

l := engine.NewLogActionLogger(ctx, upper.Dispatch)
ctx = logger.WithLogger(ctx, l)
Expand All @@ -108,6 +113,27 @@ func (c *upCmd) run(ctx context.Context, args []string) error {
})
}

if c.port != 0 {
http.Handle("/", server.Router())
httpServer := &http.Server{
Addr: fmt.Sprintf(":%d", c.port),
Handler: http.DefaultServeMux,
}

g.Go(func() error {
<-ctx.Done()
return httpServer.Shutdown(context.Background())
})

g.Go(func() error {
err := httpServer.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
return err
}
return nil
})
}

triggerMode := model.TriggerAuto
if !c.autoDeploy {
triggerMode = model.TriggerManual
Expand Down
21 changes: 13 additions & 8 deletions internal/cli/wire.go
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/windmilleng/tilt/internal/dockercompose"
"github.com/windmilleng/tilt/internal/engine"
"github.com/windmilleng/tilt/internal/hud"
"github.com/windmilleng/tilt/internal/hud/server"
"github.com/windmilleng/tilt/internal/k8s"
"github.com/windmilleng/tilt/internal/store"
)
Expand Down Expand Up @@ -55,6 +56,7 @@ var BaseWireSet = wire.NewSet(

provideLogActions,
store.NewStore,
wire.Bind(new(store.RStore), new(store.Store)),

engine.NewUpper,
provideAnalytics,
Expand All @@ -63,26 +65,29 @@ var BaseWireSet = wire.NewSet(
engine.ProvideFsWatcherMaker,
engine.ProvideTimerMaker,

provideHudAndUpper,
server.ProvideHeadsUpServer,

provideThreads,
)

func wireDemo(ctx context.Context, branch demo.RepoBranch) (demo.Script, error) {
wire.Build(BaseWireSet, demo.NewScript)
return demo.Script{}, nil
}

func wireHudAndUpper(ctx context.Context) (HudAndUpper, error) {
func wireThreads(ctx context.Context) (Threads, error) {
wire.Build(BaseWireSet)
return HudAndUpper{}, nil
return Threads{}, nil
}

type HudAndUpper struct {
hud hud.HeadsUpDisplay
upper engine.Upper
type Threads struct {
hud hud.HeadsUpDisplay
upper engine.Upper
server server.HeadsUpServer
}

func provideHudAndUpper(h hud.HeadsUpDisplay, upper engine.Upper) HudAndUpper {
return HudAndUpper{h, upper}
func provideThreads(h hud.HeadsUpDisplay, upper engine.Upper, server server.HeadsUpServer) Threads {
return Threads{h, upper, server}
}

func wireK8sClient(ctx context.Context) (k8s.Client, error) {
Expand Down
85 changes: 44 additions & 41 deletions internal/cli/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 13 additions & 13 deletions internal/engine/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions internal/hud/server/server.go
@@ -0,0 +1,43 @@
package server

import (
"encoding/json"
"fmt"
"net/http"

"github.com/gorilla/mux"
"github.com/windmilleng/tilt/internal/store"
)

type HeadsUpServer struct {
store store.RStore
router *mux.Router
}

func ProvideHeadsUpServer(store store.RStore) HeadsUpServer {
r := mux.NewRouter().UseEncodedPath()
s := HeadsUpServer{
store: store,
router: r,
}

r.HandleFunc("/api/view", s.ViewJSON)

return s
}

func (s HeadsUpServer) Router() http.Handler {
return s.router
}

func (s HeadsUpServer) ViewJSON(w http.ResponseWriter, req *http.Request) {
state := s.store.RLockState()
view := store.StateToView(state)
s.store.RUnlockState()

w.Header().Set("Content-Type", "application/json")
err := json.NewEncoder(w).Encode(view)
if err != nil {
http.Error(w, fmt.Sprintf("Error rendering view payload: %v", err), http.StatusInternalServerError)
}
}

0 comments on commit d96547d

Please sign in to comment.