package api import ( "net/http" "github.com/jfraeys/fetch_ml/internal/api/datasets" "github.com/jfraeys/fetch_ml/internal/api/jobs" "github.com/jfraeys/fetch_ml/internal/api/jupyter" "github.com/jfraeys/fetch_ml/internal/api/ws" "github.com/jfraeys/fetch_ml/internal/prommetrics" ) // registerRoutes sets up all HTTP routes and handlers func (s *Server) registerRoutes(mux *http.ServeMux) { // Register Prometheus metrics endpoint (if enabled) if s.config.Monitoring.Prometheus.Enabled { s.promMetrics = prommetrics.New() s.logger.Info("prometheus metrics initialized") // Register metrics endpoint metricsPath := s.config.Monitoring.Prometheus.Path if metricsPath == "" { metricsPath = "/metrics" } mux.Handle(metricsPath, s.promMetrics.Handler()) s.logger.Info("metrics endpoint registered", "path", metricsPath) } // Register health check endpoints (if enabled) if s.config.Monitoring.HealthChecks.Enabled { s.registerHealthRoutes(mux) } // Register WebSocket endpoint s.registerWebSocketRoutes(mux) // Register HTTP API handlers s.handlers.RegisterHandlers(mux) } // registerHealthRoutes sets up health check endpoints func (s *Server) registerHealthRoutes(mux *http.ServeMux) { healthHandler := NewHealthHandler(s) healthHandler.RegisterRoutes(mux) mux.HandleFunc("/health/ok", s.handlers.handleHealth) s.logger.Info("health check endpoints registered") } // registerWebSocketRoutes sets up WebSocket endpoint func (s *Server) registerWebSocketRoutes(mux *http.ServeMux) { // Initialize audit logger for WebSocket connections auditLogger := s.initAuditLogger() // Register WebSocket handler with security config and audit logger securityCfg := getSecurityConfig(s.config) // Create jobs handler jobsHandler := jobs.NewHandler( s.expManager, s.logger, s.taskQueue, s.db, s.config.BuildAuthConfig(), ) // Create jupyter handler jupyterHandler := jupyter.NewHandler( s.logger, s.jupyterServiceMgr, s.config.BuildAuthConfig(), ) // Create datasets handler datasetsHandler := datasets.NewHandler( s.logger, s.db, s.config.DataDir, ) wsHandler := ws.NewHandler( s.config.BuildAuthConfig(), s.logger, s.expManager, s.config.DataDir, s.taskQueue, s.db, s.jupyterServiceMgr, securityCfg, auditLogger, jobsHandler, jupyterHandler, datasetsHandler, ) mux.Handle("/ws", wsHandler) s.logger.Info("websocket endpoint registered") }