76 lines
1.2 KiB
Go
76 lines
1.2 KiB
Go
package web
|
|
|
|
import (
|
|
"net/http"
|
|
"platform/pkg/env"
|
|
"runtime"
|
|
|
|
"log/slog"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
"github.com/gofiber/fiber/v2/middleware/requestid"
|
|
)
|
|
|
|
import _ "net/http/pprof"
|
|
|
|
type Config struct {
|
|
Listen string
|
|
}
|
|
|
|
type Server struct {
|
|
config *Config
|
|
fiber *fiber.App
|
|
}
|
|
|
|
func New(config *Config) (*Server, error) {
|
|
_config := config
|
|
if config == nil {
|
|
_config = &Config{}
|
|
}
|
|
|
|
return &Server{
|
|
config: _config,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Server) Run() error {
|
|
|
|
s.fiber = fiber.New(fiber.Config{
|
|
ErrorHandler: ErrorHandler,
|
|
})
|
|
|
|
s.fiber.Use(logger.New(logger.Config{
|
|
DisableColors: false,
|
|
}))
|
|
s.fiber.Use(requestid.New())
|
|
|
|
ApplyRouters(s.fiber)
|
|
|
|
// pprof
|
|
go func() {
|
|
runtime.SetBlockProfileRate(1)
|
|
err := http.ListenAndServe(":6060", nil)
|
|
if err != nil {
|
|
slog.Error("pprof 服务错误", slog.Any("err", err))
|
|
}
|
|
}()
|
|
|
|
port := env.AppPort
|
|
slog.Info("Server started on :" + port)
|
|
err := s.fiber.Listen(":" + port)
|
|
if err != nil {
|
|
slog.Error("Failed to start server", slog.Any("err", err))
|
|
}
|
|
|
|
slog.Info("Server stopped")
|
|
return nil
|
|
}
|
|
|
|
func (s *Server) Stop() {
|
|
err := s.fiber.Shutdown()
|
|
if err != nil {
|
|
slog.Error("Failed to shutdown server", slog.Any("err", err))
|
|
}
|
|
}
|