Files
mineatar-api-server/src/main.go
2023-07-20 13:57:29 -05:00

74 lines
1.4 KiB
Go

package main
import (
"log"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
)
var (
app *fiber.App = fiber.New(fiber.Config{
DisableStartupMessage: true,
ErrorHandler: func(ctx *fiber.Ctx, err error) error {
log.Println(ctx.Request().URI(), err)
return ctx.SendStatus(http.StatusInternalServerError)
},
})
r *Redis = &Redis{}
conf *Config = &Config{}
instanceID uint16 = 0
)
func init() {
var err error
if err = conf.ReadFile("config.yml"); err != nil {
log.Fatal(err)
}
if err = r.Connect(conf.Redis); err != nil {
log.Fatal(err)
}
log.Println("Successfully connected to Redis")
app.Use(recover.New())
if conf.Environment == "development" {
app.Use(cors.New(cors.Config{
AllowOrigins: "*",
AllowMethods: "HEAD,OPTIONS,GET",
ExposeHeaders: "X-Cache-Hit,X-Cache-Time-Remaining",
}))
app.Use(logger.New(logger.Config{
Format: "${time} ${ip}:${port} -> ${status}: ${method} ${path} (${latency})\n",
TimeFormat: "2006/01/02 15:04:05",
}))
}
if instanceID, err = GetInstanceID(); err != nil {
panic(err)
}
}
func main() {
defer r.Close()
go ListenAndServe(conf.Host, conf.Port+instanceID)
defer app.Shutdown()
s := make(chan os.Signal, 1)
signal.Notify(s, os.Interrupt, syscall.SIGTERM)
<-s
}