// Setup all routers, handlers and start a HTTP server (blocking call) func (api *RESTfulAPI) start(catalogStorage catalog.CatalogStorage) { api.mountCatalog(catalogStorage) api.mountResources() api.router.Methods("GET", "POST").Path("/dashboard").HandlerFunc(api.dashboardHandler(*confPath)) api.router.Methods("GET").Path(api.restConfig.Location).HandlerFunc(api.indexHandler()) err := mime.AddExtensionType(".jsonld", "application/ld+json") if err != nil { logger.Println("RESTfulAPI.start() ERROR:", err.Error()) } // Configure the middleware n := negroni.New( negroni.NewRecovery(), negroni.NewLogger(), &negroni.Static{ Dir: http.Dir(api.config.StaticDir), Prefix: StaticLocation, IndexFile: "index.html", }, ) // Mount router n.UseHandler(api.router) // Start the listener addr := fmt.Sprintf("%v:%v", api.config.Http.BindAddr, api.config.Http.BindPort) logger.Printf("RESTfulAPI.start() Starting server at http://%v%v", addr, api.restConfig.Location) n.Run(addr) }
func main() { flag.Parse() config, err := loadConfig(*confPath) if err != nil { logger.Fatalf("Error reading config file %v: %v", *confPath, err) } r, err := setupRouter(config) if err != nil { logger.Fatal(err.Error()) } // Announce service using DNS-SD var bonjourCh chan<- bool if config.DnssdEnabled { bonjourCh, err = bonjour.Register(config.Description, catalog.DNSSDServiceType, "", config.BindPort, []string{fmt.Sprintf("uri=%s", config.ApiLocation)}, nil) if err != nil { logger.Printf("Failed to register DNS-SD service: %s", err.Error()) } else { logger.Println("Registered service via DNS-SD using type", catalog.DNSSDServiceType) defer func(ch chan<- bool) { ch <- true }(bonjourCh) } } // Setup signal catcher for the server's proper shutdown c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) go func() { for _ = range c { // sig is a ^C, handle it //TODO: put here the last will logic logger.Println("Stopped") os.Exit(0) } }() err = mime.AddExtensionType(".jsonld", "application/ld+json") if err != nil { logger.Println("ERROR: ", err.Error()) } // Configure the middleware n := negroni.New( negroni.NewRecovery(), negroni.NewLogger(), &negroni.Static{ Dir: http.Dir(config.StaticDir), Prefix: utils.StaticLocation, IndexFile: "index.html", }, ) // Mount router n.UseHandler(r) // Start listener endpoint := fmt.Sprintf("%s:%s", config.BindAddr, strconv.Itoa(config.BindPort)) logger.Printf("Starting standalone Service Catalog at %v%v", endpoint, config.ApiLocation) n.Run(endpoint) }