func runServer(_ *docopt.Args) error { addr := ":" + os.Getenv("PORT") db := postgres.Wait(nil, nil) if err := dbMigrations.Migrate(db); err != nil { return fmt.Errorf("error running DB migrations: %s", err) } mux := http.NewServeMux() repo, err := data.NewFileRepoFromEnv(db) if err != nil { return err } hb, err := discoverd.AddServiceAndRegister("blobstore", addr) if err != nil { return err } shutdown.BeforeExit(func() { hb.Close() }) log.Println("Blobstore serving files on " + addr) mux.Handle("/", handler(repo)) mux.Handle(status.Path, status.Handler(func() status.Status { if err := db.Exec("SELECT 1"); err != nil { return status.Unhealthy } return status.Healthy })) h := httphelper.ContextInjector("blobstore", httphelper.NewRequestLogger(mux)) return http.ListenAndServe(addr, h) }
// NewHandler returns a new instance of Handler. func NewHandler() *Handler { h := &Handler{ router: httprouter.New(), } h.router.Handler("GET", status.Path, status.Handler(h.healthStatus)) h.router.GET("/status", h.handleGetStatus) h.router.POST("/stop", h.handlePostStop) return h }
func ServeHTTP(pg *Postgres, peer *state.Peer, hb discoverd.Heartbeater, log log15.Logger) error { api := &HTTP{ pg: pg, peer: peer, hb: hb, log: log, } r := httprouter.New() r.Handler("GET", status.Path, status.Handler(api.GetHealthStatus)) r.GET("/status", api.GetStatus) r.POST("/stop", api.Stop) return http.ListenAndServe(":5433", r) }
func main() { defer shutdown.Exit() flag.Parse() addr := os.Getenv("PORT") if addr == "" { addr = *listenPort } addr = ":" + addr var fs Filesystem var storageDesc string if *storageDir != "" { fs = NewOSFilesystem(*storageDir) storageDesc = *storageDir } else { var err error db := postgres.Wait(nil, nil) fs, err = NewPostgresFilesystem(db) if err != nil { shutdown.Fatal(err) } storageDesc = "Postgres" } if *serviceDiscovery { hb, err := discoverd.AddServiceAndRegister("blobstore", addr) if err != nil { shutdown.Fatal(err) } shutdown.BeforeExit(func() { hb.Close() }) } log.Println("Blobstore serving files on " + addr + " from " + storageDesc) mux := http.NewServeMux() mux.Handle("/", handler(fs)) mux.Handle(status.Path, status.Handler(fs.Status)) h := httphelper.ContextInjector("blobstore", httphelper.NewRequestLogger(mux)) shutdown.Fatal(http.ListenAndServe(addr, h)) }
func appHandler(c handlerConfig) http.Handler { err := schema.Load(schemaRoot) if err != nil { shutdown.Fatal(err) } q := que.NewClient(c.pgxpool) providerRepo := NewProviderRepo(c.db) keyRepo := NewKeyRepo(c.db) resourceRepo := NewResourceRepo(c.db) appRepo := NewAppRepo(c.db, os.Getenv("DEFAULT_ROUTE_DOMAIN"), c.rc) artifactRepo := NewArtifactRepo(c.db) releaseRepo := NewReleaseRepo(c.db) jobRepo := NewJobRepo(c.db) formationRepo := NewFormationRepo(c.db, appRepo, releaseRepo, artifactRepo) deploymentRepo := NewDeploymentRepo(c.db, c.pgxpool) api := controllerAPI{ appRepo: appRepo, releaseRepo: releaseRepo, providerRepo: providerRepo, formationRepo: formationRepo, artifactRepo: artifactRepo, jobRepo: jobRepo, resourceRepo: resourceRepo, deploymentRepo: deploymentRepo, clusterClient: c.cc, logaggc: c.lc, routerc: c.rc, que: q, } httpRouter := httprouter.New() crud(httpRouter, "apps", ct.App{}, appRepo) crud(httpRouter, "releases", ct.Release{}, releaseRepo) crud(httpRouter, "providers", ct.Provider{}, providerRepo) crud(httpRouter, "artifacts", ct.Artifact{}, artifactRepo) crud(httpRouter, "keys", ct.Key{}, keyRepo) httpRouter.Handler("GET", status.Path, status.Handler(func() status.Status { if err := c.db.Exec("SELECT 1"); err != nil { return status.Unhealthy } return status.Healthy })) httpRouter.POST("/apps/:apps_id", httphelper.WrapHandler(api.UpdateApp)) httpRouter.GET("/apps/:apps_id/log", httphelper.WrapHandler(api.appLookup(api.AppLog))) httpRouter.GET("/apps/:apps_id/events", httphelper.WrapHandler(api.appLookup(api.AppEvents))) httpRouter.DELETE("/apps/:apps_id", httphelper.WrapHandler(api.appLookup(api.DeleteApp))) httpRouter.PUT("/apps/:apps_id/formations/:releases_id", httphelper.WrapHandler(api.appLookup(api.PutFormation))) httpRouter.GET("/apps/:apps_id/formations/:releases_id", httphelper.WrapHandler(api.appLookup(api.GetFormation))) httpRouter.DELETE("/apps/:apps_id/formations/:releases_id", httphelper.WrapHandler(api.appLookup(api.DeleteFormation))) httpRouter.GET("/apps/:apps_id/formations", httphelper.WrapHandler(api.appLookup(api.ListFormations))) httpRouter.GET("/formations", httphelper.WrapHandler(api.GetFormations)) httpRouter.POST("/apps/:apps_id/jobs", httphelper.WrapHandler(api.appLookup(api.RunJob))) httpRouter.GET("/apps/:apps_id/jobs/:jobs_id", httphelper.WrapHandler(api.appLookup(api.GetJob))) httpRouter.PUT("/apps/:apps_id/jobs/:jobs_id", httphelper.WrapHandler(api.appLookup(api.PutJob))) httpRouter.GET("/apps/:apps_id/jobs", httphelper.WrapHandler(api.appLookup(api.ListJobs))) httpRouter.DELETE("/apps/:apps_id/jobs/:jobs_id", httphelper.WrapHandler(api.appLookup(api.KillJob))) httpRouter.POST("/apps/:apps_id/deploy", httphelper.WrapHandler(api.appLookup(api.CreateDeployment))) httpRouter.GET("/deployments/:deployment_id", httphelper.WrapHandler(api.GetDeployment)) httpRouter.PUT("/apps/:apps_id/release", httphelper.WrapHandler(api.appLookup(api.SetAppRelease))) httpRouter.GET("/apps/:apps_id/release", httphelper.WrapHandler(api.appLookup(api.GetAppRelease))) httpRouter.GET("/apps/:apps_id/releases", httphelper.WrapHandler(api.appLookup(api.GetAppReleases))) httpRouter.POST("/providers/:providers_id/resources", httphelper.WrapHandler(api.ProvisionResource)) httpRouter.GET("/providers/:providers_id/resources", httphelper.WrapHandler(api.GetProviderResources)) httpRouter.GET("/providers/:providers_id/resources/:resources_id", httphelper.WrapHandler(api.GetResource)) httpRouter.PUT("/providers/:providers_id/resources/:resources_id", httphelper.WrapHandler(api.PutResource)) httpRouter.DELETE("/providers/:providers_id/resources/:resources_id", httphelper.WrapHandler(api.DeleteResource)) httpRouter.GET("/apps/:apps_id/resources", httphelper.WrapHandler(api.appLookup(api.GetAppResources))) httpRouter.POST("/apps/:apps_id/routes", httphelper.WrapHandler(api.appLookup(api.CreateRoute))) httpRouter.GET("/apps/:apps_id/routes", httphelper.WrapHandler(api.appLookup(api.GetRouteList))) httpRouter.GET("/apps/:apps_id/routes/:routes_type/:routes_id", httphelper.WrapHandler(api.appLookup(api.GetRoute))) httpRouter.DELETE("/apps/:apps_id/routes/:routes_type/:routes_id", httphelper.WrapHandler(api.appLookup(api.DeleteRoute))) httpRouter.POST("/apps/:apps_id/meta", httphelper.WrapHandler(api.appLookup(api.UpdateAppMeta))) return httphelper.ContextInjector("controller", httphelper.NewRequestLogger(muxHandler(httpRouter, c.keys))) }
func main() { handler := newStatusHandler(status.Handler(GetStatus), os.Getenv("AUTH_KEY")) log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), httphelper.CORSAllowAll.Handler(handler))) }