feat: 优雅关闭与模板错误检查

This commit is contained in:
2026-06-20 00:06:08 +08:00
parent 46778bc227
commit 6efba13d7d
+33 -4
View File
@@ -1,12 +1,17 @@
package main package main
import ( import (
"context"
"fmt" "fmt"
"html/template" "html/template"
"log" "log"
"net/http"
"os" "os"
"os/signal"
"path/filepath" "path/filepath"
"strings" "strings"
"syscall"
"time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -54,7 +59,11 @@ func main() {
} }
// Use the relative path as template name (e.g. "layouts/base.html") // Use the relative path as template name (e.g. "layouts/base.html")
name := strings.TrimPrefix(path, "templates/") name := strings.TrimPrefix(path, "templates/")
tmpl, _ = tmpl.New(name).Parse(string(data)) t, parseErr := tmpl.New(name).Parse(string(data))
if parseErr != nil {
log.Fatalf("failed to parse template %s: %v", name, parseErr)
}
tmpl = t
return nil return nil
}) })
r.SetHTMLTemplate(tmpl) r.SetHTMLTemplate(tmpl)
@@ -95,8 +104,28 @@ func main() {
r.GET("/api/repos/:id/review/notes", review.GetNotes) r.GET("/api/repos/:id/review/notes", review.GetNotes)
r.POST("/api/repos/:id/review/pdf", review.GeneratePDF) r.POST("/api/repos/:id/review/pdf", review.GeneratePDF)
log.Printf("PR-Helper starting on :%s", cfg.Port) // Graceful shutdown with signal handling
if err := r.Run(":" + cfg.Port); err != nil { srv := &http.Server{
log.Fatalf("failed to start server: %v", err) Addr: ":" + cfg.Port,
Handler: r,
} }
go func() {
log.Printf("PR-Helper starting on :%s", cfg.Port)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("failed to start server: %v", err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("server forced to shutdown: %v", err)
}
log.Println("server exited")
} }