cmd/api/main.go (40 lines of code) (raw):

package main import ( "context" "fmt" "log" "net/http" "os" "github.com/GoogleCloudPlatform/gcs-metadata-server/internal/api/router" "github.com/GoogleCloudPlatform/gcs-metadata-server/internal/repo" "github.com/jessevdk/go-flags" ) type options struct { Port int `short:"p" long:"port" description:"Port for API to listen on" required:"true"` DatabaseUrl string `short:"d" long:"database-url" description:"Database URL in which to store metadata" required:"true"` } const maxDbConnections = 5 func main() { var opts options if _, err := flags.Parse(&opts); err != nil { os.Exit(1) } // Connect database ctx := context.Background() db := repo.NewDatabase(opts.DatabaseUrl, maxDbConnections) if err := db.Connect(ctx); err != nil { log.Fatalf("Error connecting to database: %v\n", err) } defer db.Close() if exists, err := db.PingTable(); !exists || err != nil { log.Fatalf("Database has not been initialized: %v\n", err) } // Start server router := router.New(db) server := http.Server{ Addr: fmt.Sprintf(":%d", opts.Port), Handler: router, } log.Println("Starting server on port", server.Addr) if err := server.ListenAndServe(); err != nil { log.Fatalf("Error in server: %v\n", err) } }