Implemented WebSocket handlers by creating and integrating sub-packages: **New package: api/datasets** - HandleDatasetList, HandleDatasetRegister, HandleDatasetInfo, HandleDatasetSearch - Binary protocol parsing for each operation **Updated ws/handler.go** - Added jobsHandler, jupyterHandler, datasetsHandler fields - Updated NewHandler to accept sub-handlers - Implemented handleAnnotateRun -> api/jobs - Implemented handleSetRunNarrative -> api/jobs - Implemented handleStartJupyter -> api/jupyter - Implemented handleStopJupyter -> api/jupyter - Implemented handleListJupyter -> api/jupyter - Implemented handleDatasetList -> api/datasets - Implemented handleDatasetRegister -> api/datasets - Implemented handleDatasetInfo -> api/datasets - Implemented handleDatasetSearch -> api/datasets **Updated api/routes.go** - Create jobs, jupyter, and datasets handlers - Pass all handlers to ws.NewHandler Build passes, all tests pass.
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
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")
|
|
}
|