github.com/grahambrereton-form3/tilt@v0.10.18/internal/cli/synclet.go (about)

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