diff options
author | 2024-09-08 20:32:51 +0200 | |
---|---|---|
committer | 2024-09-08 21:30:55 +0200 | |
commit | 99ff2694cf946b83006adf5dcdd81ecad9eaac59 (patch) | |
tree | 0aa70c861dc6578051a08b0114236f3212248787 /main.go | |
parent | fix: manager started race (diff) | |
download | cgit-httpd-99ff2694cf946b83006adf5dcdd81ecad9eaac59.tar.xz |
feat: reusable HTTP server runnable
Replace the HTTP server runnable with a version derived from
controller-runtime's manager, allowing for more than one type of HTTP
server to be added.
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 31 |
1 files changed, 24 insertions, 7 deletions
@@ -5,8 +5,13 @@ package main import ( "flag" + "net" + "net/http" "os" + "strconv" + "time" + "github.com/gorilla/mux" "github.com/rs/zerolog" "go.terinstock.com/cgit-httpd/handlers/cgit" "go.terinstock.com/cgit-httpd/handlers/git" @@ -30,10 +35,7 @@ func main() { logger.Info().Interface("config", cfg).Send() - srv := server.New(server.Options{ - Host: cfg.HTTP.Host, - Port: cfg.HTTP.Port, - }) + gitMux := mux.NewRouter() cgit.New(cgit.Options{ CGI: cfg.CGit.CGI, @@ -42,7 +44,7 @@ func main() { ConfigFile: cfg.CGit.ConfigFile, Logger: logger.With().Str("handler", "cgit").Logger(), }). - WithRegister(srv). + WithRegister(RegistererFunc(gitMux.Handle)). Build() git.New(git.Options{ @@ -51,13 +53,28 @@ func main() { ExportAll: cfg.Git.ExportAll, Logger: logger.With().Str("handler", "git").Logger(), }). - WithRegister(srv). + WithRegister(RegistererFunc(gitMux.Handle)). Build() m := manager.New() - m.Add(srv) + m.Add(&server.Server{ + Name: "git", + Server: &http.Server{ + Addr: net.JoinHostPort(cfg.HTTP.Host, strconv.Itoa(cfg.HTTP.Port)), + Handler: gitMux, + MaxHeaderBytes: 1 << 20, + IdleTimeout: 90 * time.Second, + ReadHeaderTimeout: 32 * time.Second, + }, + }) if err := m.Start(signals.SetupSignalHandler()); err != nil { logger.Info().Err(err).Msg("manager stopped") } } + +type RegistererFunc func(string, http.Handler) *mux.Route + +func (r RegistererFunc) Register(name string, handler http.Handler) { + r(name, handler) +} |