func run(ctx *cli.Context, car *sidecar) { if len(ctx.String("address")) > 0 { Address = ctx.String("address") } if len(ctx.String("cors")) > 0 { origins := make(map[string]bool) for _, origin := range strings.Split(ctx.String("cors"), ",") { origins[origin] = true } CORS = origins } if len(ctx.String("namespace")) > 0 { Namespace = ctx.String("namespace") } // Init plugins for _, p := range Plugins() { p.Init(ctx) } var opts []server.Option if ctx.GlobalBool("enable_tls") { config, err := helper.TLSConfig(ctx) if err != nil { fmt.Println(err.Error()) return } opts = append(opts, server.EnableTLS(true)) opts = append(opts, server.TLSConfig(config)) } r := mux.NewRouter() s := &srv{r} // new server srv := server.NewServer(Address) srv.Init(opts...) // register handlers if car != nil { log.Printf("Registering Health handler at %s", HealthPath) r.Handle(HealthPath, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if c, err := car.hc(); err != nil { http.Error(w, err.Error(), c) return } })) } log.Printf("Registering Registry handler at %s", RegistryPath) r.Handle(RegistryPath, http.HandlerFunc(handler.Registry)) log.Printf("Registering RPC handler at %s", RPCPath) r.Handle(RPCPath, http.HandlerFunc(handler.RPC)) log.Printf("Registering Broker handler at %s", BrokerPath) r.Handle(BrokerPath, http.HandlerFunc(handler.Broker)) log.Printf("Registering Root Handler at %s", RootPath) r.PathPrefix(RootPath).Handler(handler.RPCX(Namespace)) var h http.Handler = s if ctx.GlobalBool("enable_stats") { st := stats.New() r.Handle("/stats", http.HandlerFunc(st.StatsHandler)) h = st.ServeHTTP(r) st.Start() defer st.Stop() } // reverse wrap handler plugins := append(Plugins(), plugin.Plugins()...) for i := len(plugins); i > 0; i-- { h = plugins[i-1].Handler()(h) } srv.Handle("/", h) // Initialise Server service := micro.NewService( micro.Name("go.micro.sidecar"), micro.RegisterTTL( time.Duration(ctx.GlobalInt("register_ttl"))*time.Second, ), micro.RegisterInterval( time.Duration(ctx.GlobalInt("register_interval"))*time.Second, ), ) if err := srv.Start(); err != nil { log.Fatal(err) } // Run server if err := service.Run(); err != nil { log.Fatal(err) } if err := srv.Stop(); err != nil { log.Fatal(err) } }
func run(ctx *cli.Context) { if len(ctx.String("address")) > 0 { Address = ctx.String("address") } if len(ctx.String("handler")) > 0 { Handler = ctx.String("handler") } if len(ctx.String("namespace")) > 0 { Namespace = ctx.String("namespace") } if len(ctx.String("cors")) > 0 { origins := make(map[string]bool) for _, origin := range strings.Split(ctx.String("cors"), ",") { origins[origin] = true } CORS = origins } // Init plugins for _, p := range Plugins() { p.Init(ctx) } // Init API var opts []server.Option if ctx.GlobalBool("enable_tls") { config, err := helper.TLSConfig(ctx) if err != nil { fmt.Println(err.Error()) return } opts = append(opts, server.EnableTLS(true)) opts = append(opts, server.TLSConfig(config)) } // create the router r := mux.NewRouter() s := &srv{r} var h http.Handler = s if ctx.GlobalBool("enable_stats") { st := stats.New() r.HandleFunc("/stats", st.StatsHandler) h = st.ServeHTTP(s) st.Start() defer st.Stop() } log.Printf("Registering RPC Handler at %s", RPCPath) r.HandleFunc(RPCPath, handler.RPC) switch Handler { case "rpc": log.Printf("Registering API RPC Handler at %s", APIPath) r.PathPrefix(APIPath).Handler(handler.RPCX(Namespace)) case "proxy": log.Printf("Registering API Proxy Handler at %s", ProxyPath) r.PathPrefix(ProxyPath).Handler(handler.Proxy(Namespace, false)) default: log.Printf("Registering API Default Handler at %s", APIPath) r.PathPrefix(APIPath).Handler(handler.API(Namespace)) } // reverse wrap handler plugins := append(Plugins(), plugin.Plugins()...) for i := len(plugins); i > 0; i-- { h = plugins[i-1].Handler()(h) } // create the server api := server.NewServer(Address) api.Init(opts...) api.Handle("/", h) // Initialise Server service := micro.NewService( micro.Name("go.micro.api"), micro.RegisterTTL( time.Duration(ctx.GlobalInt("register_ttl"))*time.Second, ), micro.RegisterInterval( time.Duration(ctx.GlobalInt("register_interval"))*time.Second, ), ) // Start API if err := api.Start(); err != nil { log.Fatal(err) } // Run server if err := service.Run(); err != nil { log.Fatal(err) } // Stop API if err := api.Stop(); err != nil { log.Fatal(err) } }