first commit
This commit is contained in:
72
internal/server/http.go
Normal file
72
internal/server/http.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"linkmaster-node/internal/config"
|
||||
"linkmaster-node/internal/handler"
|
||||
"linkmaster-node/internal/recovery"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type HTTPServer struct {
|
||||
server *http.Server
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
func NewHTTPServer(cfg *config.Config) *HTTPServer {
|
||||
if !cfg.Debug {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
|
||||
router := gin.New()
|
||||
router.Use(gin.Recovery())
|
||||
router.Use(recoveryMiddleware)
|
||||
|
||||
// 初始化持续测试处理器
|
||||
handler.InitContinuousHandler(cfg)
|
||||
|
||||
// 启动任务清理goroutine
|
||||
handler.StartTaskCleanup()
|
||||
|
||||
// 注册路由
|
||||
api := router.Group("/api")
|
||||
{
|
||||
api.POST("/test", handler.HandleTest)
|
||||
api.POST("/continuous/start", handler.HandleContinuousStart)
|
||||
api.POST("/continuous/stop", handler.HandleContinuousStop)
|
||||
api.GET("/continuous/status", handler.HandleContinuousStatus)
|
||||
api.GET("/health", handler.HandleHealth)
|
||||
}
|
||||
|
||||
server := &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", cfg.Server.Port),
|
||||
Handler: router,
|
||||
}
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
return &HTTPServer{
|
||||
server: server,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HTTPServer) Start() error {
|
||||
s.logger.Info("HTTP服务器启动", zap.String("addr", s.server.Addr))
|
||||
return s.server.ListenAndServe()
|
||||
}
|
||||
|
||||
func (s *HTTPServer) Shutdown(ctx context.Context) error {
|
||||
return s.server.Shutdown(ctx)
|
||||
}
|
||||
|
||||
func recoveryMiddleware(c *gin.Context) {
|
||||
defer recovery.Recover()
|
||||
c.Next()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user