doggo/cmd/api/api.go

78 lines
1.8 KiB
Go
Raw Permalink Normal View History

package main
import (
2021-03-02 13:51:59 +01:00
"embed"
"io/fs"
"net/http"
2021-02-27 09:31:59 +01:00
"time"
2023-03-27 00:33:20 +02:00
"git.zio.sh/astra/doggo/internal/app"
"git.zio.sh/astra/doggo/pkg/utils"
2021-02-27 09:31:59 +01:00
"github.com/sirupsen/logrus"
"github.com/go-chi/chi"
2021-03-02 13:51:59 +01:00
"github.com/go-chi/chi/middleware"
"github.com/knadh/koanf"
)
var (
logger = utils.InitLogger()
2021-02-27 09:31:59 +01:00
ko = koanf.New(".")
// Version and date of the build. This is injected at build-time.
buildVersion = "unknown"
buildDate = "unknown"
2021-03-02 13:51:59 +01:00
//go:embed assets/*
assetsDir embed.FS
//go:embed index.html
html []byte
)
func main() {
2021-02-27 09:31:59 +01:00
initConfig()
2021-02-27 09:31:59 +01:00
// Initialize app.
app := app.New(logger, buildVersion)
2021-03-02 13:51:59 +01:00
// Register router instance.
2021-02-27 09:31:59 +01:00
r := chi.NewRouter()
2021-03-02 13:51:59 +01:00
// Register middlewares
r.Use(middleware.RequestID)
r.Use(middleware.RealIP)
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
// Frontend Handlers.
assets, _ := fs.Sub(assetsDir, "assets")
r.Get("/assets/*", func(w http.ResponseWriter, r *http.Request) {
fs := http.StripPrefix("/assets/", http.FileServer(http.FS(assets)))
fs.ServeHTTP(w, r)
})
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "text/html")
w.Write(html)
})
// API Handlers.
r.Get("/api/", wrap(app, handleIndexAPI))
r.Get("/api/ping/", wrap(app, handleHealthCheck))
r.Post("/api/lookup/", wrap(app, handleLookup))
2021-02-27 09:31:59 +01:00
// HTTP Server.
srv := &http.Server{
Addr: ko.String("server.address"),
Handler: r,
ReadTimeout: ko.Duration("server.read_timeout") * time.Millisecond,
WriteTimeout: ko.Duration("server.write_timeout") * time.Millisecond,
IdleTimeout: ko.Duration("server.keepalive_timeout") * time.Millisecond,
}
2021-02-27 09:31:59 +01:00
logger.WithFields(logrus.Fields{
"address": srv.Addr,
}).Info("starting server")
2021-02-27 09:31:59 +01:00
if err := srv.ListenAndServe(); err != nil {
logger.Fatalf("couldn't start server: %v", err)
}
}