diff options
author | xengineering <me@xengineering.eu> | 2023-12-27 12:59:52 +0100 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2023-12-27 13:05:05 +0100 |
commit | 508aa4b7e4afa4da593021568afad1d565e8b968 (patch) | |
tree | d5d0cccc046a0c32b342b94c49bf242a86f06d52 | |
parent | 4721d69eb139e7da26f5454b80c39a4f1c8f1e23 (diff) | |
download | ceres-508aa4b7e4afa4da593021568afad1d565e8b968.tar ceres-508aa4b7e4afa4da593021568afad1d565e8b968.tar.zst ceres-508aa4b7e4afa4da593021568afad1d565e8b968.zip |
Add HTTP server without handlers
This adds the infrastructure to add HTTP handlers. It already sets up
the HTTP server and makes sure it is started and stopped.
-rw-r--r-- | main.go | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -1,12 +1,16 @@ package main import ( + "context" "log" + "net/http" "os" "os/signal" "syscall" "xengineering.eu/ceres/model" + + "github.com/gorilla/mux" ) func main() { @@ -16,9 +20,37 @@ func main() { model.InitDatabase() defer model.CloseDatabase() + var srv *http.Server = startServer("127.0.0.1:8080") + go srv.ListenAndServe() + defer stopServer(srv) + listener := make(chan os.Signal) signal.Notify(listener, syscall.SIGTERM) signal.Notify(listener, syscall.SIGINT) sig := <-listener log.Printf("Cleaning up due to OS signal '%v'\n", sig) } + +func startServer(addr string) *http.Server { + var r *mux.Router = mux.NewRouter() + + muxer := http.NewServeMux() + muxer.Handle("/", r) + + var srv http.Server + srv.Addr = addr + srv.Handler = muxer + + log.Printf("Configured server to listen on http://%s\n", srv.Addr) + + return &srv +} + +func stopServer(srv *http.Server) { + var err error = srv.Shutdown(context.Background()) + if err != nil { + log.Printf("Failed to shutdown HTTP server: %v\n", err) + } else { + log.Println("Stopped HTTP server") + } +} |