diff --git a/server/server.go b/server/server.go index f6d4bd88f2d1493ba7bfd9fa62c00e69b7a7474b..15c6575640e1f74f3986b008b7c032aaf6f8b04d 100644 --- a/server/server.go +++ b/server/server.go @@ -117,14 +117,43 @@ func (s *Server) handleRoot(w http.ResponseWriter, r *http.Request) { } } - // Parse the template file - tmpl, err := template.ParseFiles("templates/" + templateName) + // Try to parse the template file with different possible paths + templatePaths := []string{ + "templates/" + templateName, + "./templates/" + templateName, + } + + var tmpl *template.Template + var err error + + // Try each path until one works + for _, path := range templatePaths { + tmpl, err = template.ParseFiles(path) + if err == nil { + break + } + } + + // If all paths fail, try default template with different possible paths if err != nil { // Fallback to default template if specified template not found slogx.Warn("Failed to parse template, falling back to default", "template", templateName, "error", err) - tmpl, err = template.ParseFiles("templates/root.html") + + defaultTemplatePaths := []string{ + "templates/root.html", + "./templates/root.html", + } + + // Try each path until one works + for _, path := range defaultTemplatePaths { + tmpl, err = template.ParseFiles(path) + if err == nil { + break + } + } + if err != nil { http.Error(w, "Failed to load template", http.StatusInternalServerError) slogx.Error("Failed to parse default template", "error", err) diff --git a/server/server_test.go b/server/server_test.go index e464f7501b4f2e08eed241a8c969f75772a8197e..99dc1407b95266117d4c42296dca57f58da99faa 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -4,6 +4,9 @@ package server import ( "net/http" "net/http/httptest" + "os" + "path/filepath" + "runtime" "testing" "time" @@ -108,6 +111,15 @@ func TestServer_SetupRouter(t *testing.T) { } func TestServer_HandleRoot(t *testing.T) { + // 获取当前文件所在的目录 + _, filename, _, _ := runtime.Caller(0) + dir := filepath.Dir(filename) + + // 将工作目录切换到项目根目录 + rootDir := filepath.Join(dir, "..") + err := os.Chdir(rootDir) + assert.NoError(t, err) + config := &testConfig{ listenAddr: ":9102", metricsPath: "/metrics",