package main import ( "encoding/json" "log/slog" "net/http" "os" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/openmeterio/openmeter/api" ) func startMockServer() { port := os.Getenv("PORT") if port == "" { port = "7860" // Default port for Hugging Face Spaces } addr := "0.0.0.0:" + port slog.Info("Starting OpenMeter Mock Server for Hugging Face Spaces", "address", addr) r := chi.NewRouter() r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(middleware.Logger) r.Use(middleware.Recoverer) // Swagger Spec swagger, err := api.GetSwagger() var swaggerJSON []byte if err == nil { swagger.Servers = nil swaggerJSON, _ = json.Marshal(swagger) } // Redirect root to api-docs r.Get("/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/api-docs", http.StatusFound) }) // /health r.Get("/health", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("OK")) }) // /api/swagger.json r.Get("/api/swagger.json", func(w http.ResponseWriter, r *http.Request) { if len(swaggerJSON) > 0 { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) _, _ = w.Write(swaggerJSON) } else { http.Error(w, "Swagger spec not found", http.StatusNotFound) } }) // /api-docs r.Get("/api-docs", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(`