// NewClient creates a new Lever Client. func NewClient() (*Client, error) { conns, err := scale.NewGRPCPool() if err != nil { return nil, err } return &Client{conns: conns}, nil }
func main() { config.Initialize() leverutil.UpdateLoggingSettings() logger.WithFields( "version", Version, "gitHash", GitHash, ).Info("Starting up...") _, err := devlogger.NewDevLogger(ExternalIPFlag.Get()) if err != nil { logger.WithFields("err", err).Fatal("Cannot start devlogger") } // Docker. dockerLocal := dockerutil.NewDockerLocal() dockerSwarm := dockerutil.NewDockerSwarm() // Own regional IP. ownIP, err := dockerutil.GetOwnEnvIPv4( dockerLocal, hostman.RegionalNetworkFlag.Get()) if err != nil { logger.WithFields("err", err).Fatal("Error getting own regional IPv4") } // Own GRPC address. grpcAddr := ownIP + ":" + InternalGRPCListenPortFlag.Get() // Start internal GRPC server. listener, err := net.Listen("tcp", grpcAddr) if err != nil { logger.WithFields( "err", err, "listenAddr", grpcAddr, ).Fatal("Could not start listening") } grpcServer := grpc.NewServer() // GRPC client pool. grpcPool, err := scale.NewGRPCPool() if err != nil { logger.WithFields("err", err).Fatal("Cannot create GRPC pool") } // Start finder. as, err := store.NewAerospike() if err != nil { logger.WithFields("err", err).Fatal("Cannot get aerospike client") } finder := host.NewFinder(dockerSwarm, as) // Start host manager. proxyInAddr := ownIP + ":" + host.EnvInListenPortFlag.Get() manager, err := hostman.NewManager( grpcServer, grpcPool, dockerLocal, grpcAddr, proxyInAddr) if err != nil { logger.WithFields("err", err).Fatal("Cannot create host manager") } // Start proxy. _, err = host.NewLeverProxy(manager, finder, ownIP, grpcPool) if err != nil { logger.WithFields("err", err).Fatal("Cannot create Lever proxy") } // Start fleettracker. _, err = fleettracker.NewFleetTracker( grpcServer, grpcPool, dockerSwarm, grpcAddr) if err != nil { logger.WithFields("err", err).Fatal("Error starting fleettracker") } // Start API server. _, err = apiserver.NewServer() if err != nil { logger.WithFields("err", err).Fatal("Error starting API server") } logger.Info("\n" + " _ ___ ___ \n" + " | | _____ _____ _ _ / _ \\/ __|\n" + " | |__/ -_) V / -_) '_| | (_) \\__ \\\n" + " |____\\___|\\_/\\___|_| \\___/|___/\n" + " v" + Version + "\n" + " Ready to serve\n") // GRPC enter loop. err = grpcServer.Serve(listener) if err != nil { logger.WithFields("err", err).Fatal("Error in internal GRPC server") } // TODO: Ideally we should trap signals and shut down properly. }