-
Notifications
You must be signed in to change notification settings - Fork 288
/
synclet.go
87 lines (71 loc) · 2.06 KB
/
synclet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package cli
import (
"context"
"fmt"
"log"
"net"
"os"
"github.com/opentracing/opentracing-go"
"github.com/spf13/cobra"
"google.golang.org/grpc"
"github.com/windmilleng/tilt/internal/container"
"github.com/windmilleng/tilt/internal/options"
"github.com/windmilleng/tilt/internal/synclet"
"github.com/windmilleng/tilt/internal/synclet/proto"
"github.com/windmilleng/tilt/internal/tracer"
"github.com/windmilleng/tilt/pkg/logger"
)
type SyncletCmd struct {
port int
debug bool
verbose bool
}
func (s *SyncletCmd) Register() *cobra.Command {
cmd := &cobra.Command{
Use: "synclet",
Short: "starts the tilt synclet daemon",
Run: func(c *cobra.Command, args []string) {
s.run()
},
}
cmd.Flags().BoolVarP(&s.debug, "debug", "d", false, "Enable debug logging")
cmd.Flags().BoolVarP(&s.verbose, "verbose", "v", false, "Enable verbose logging")
cmd.Flags().IntVar(&s.port, "port", synclet.Port, "Server port")
return cmd
}
func (sc *SyncletCmd) run() {
ctx := logger.WithLogger(
context.Background(),
logger.NewLogger(logLevel(sc.verbose, sc.debug), os.Stdout))
closer, err := tracer.Init(ctx, tracer.Windmill)
if err != nil {
log.Fatalf("error initializing tracer: %v", err)
}
defer func() {
err := closer()
if err != nil {
log.Fatalf("error closing tracer: %v", err)
}
}()
addr := fmt.Sprintf("127.0.0.1:%d", sc.port)
log.Printf("Running synclet listening on %s", addr)
l, err := net.Listen("tcp", addr)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// TODO(matt) figure out how to reconcile this with opt-in tracing
t := opentracing.GlobalTracer()
opts := options.MaxMsgServer()
opts = append(opts, options.TracingInterceptorsServer(t)...)
serv := grpc.NewServer(opts...)
// TODO(nick): Fix this to detect the container runtime inside k8s.
s, err := synclet.WireSynclet(ctx, container.RuntimeDocker)
if err != nil {
log.Fatalf("failed to wire synclet: %v", err)
}
proto.RegisterSyncletServer(serv, synclet.NewGRPCServer(s))
err = serv.Serve(l)
if err != nil {
log.Fatalf("failed to serve: %v", err)
}
}